@arcgis/core 4.31.0 → 4.31.2
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/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/02a41ff83a28a574da3b.js +1 -0
- package/assets/esri/core/workers/chunks/034b842fd1e57a663e63.js +1 -0
- package/assets/esri/core/workers/chunks/11fa84fa7fa78e61c4cb.js +1 -0
- package/assets/esri/core/workers/chunks/2ddd67ec7b364e20135c.js +1 -0
- package/assets/esri/core/workers/chunks/{e298b561933737eda0ad.js → 388dc6d50e16930aa66f.js} +1 -1
- package/assets/esri/core/workers/chunks/3f8ea858575bab03d3aa.js +1 -0
- package/assets/esri/core/workers/chunks/48db492f15074a799d28.js +1 -0
- package/assets/esri/core/workers/chunks/49cf9642f3827384127f.js +1 -0
- package/assets/esri/core/workers/chunks/50781ca6c2526b0dd73f.js +1 -0
- package/assets/esri/core/workers/chunks/511cc9f1b61318385915.js +1 -0
- package/assets/esri/core/workers/chunks/650047df195a8ac3e41e.js +1 -0
- package/assets/esri/core/workers/chunks/666663e1257ceea08f75.js +1 -0
- package/assets/esri/core/workers/chunks/{188371b682afa56bed28.js → 69c5caef30d08a5086a3.js} +1 -1
- package/assets/esri/core/workers/chunks/6e37f4ec5a5c606efacb.js +1 -0
- package/assets/esri/core/workers/chunks/6ebd25845c4c3b65f612.js +1 -0
- package/assets/esri/core/workers/chunks/{72c5fd68179af3ab163f.js → 79e95e979108e2550961.js} +1 -1
- package/assets/esri/core/workers/chunks/7bbe8df83ecac2546af7.js +1 -0
- package/assets/esri/core/workers/chunks/7e6f5f04ac11e5ec9101.js +1 -0
- package/assets/esri/core/workers/chunks/8a3787ba111d669f2955.js +1 -0
- package/assets/esri/core/workers/chunks/8c5acb0a8c0a216fa9a8.js +1 -0
- package/assets/esri/core/workers/chunks/8e0e857e59e9fbc4a4b1.js +1 -0
- package/assets/esri/core/workers/chunks/{871312317726e9776953.js → 8eec36cb9c9bdb40eab2.js} +1 -1
- package/assets/esri/core/workers/chunks/{cfa12f6d165e1b06abfb.js → 973560d8883c77f35f79.js} +1 -1
- package/assets/esri/core/workers/chunks/9857b195487aa6ff6b16.js +1 -0
- package/assets/esri/core/workers/chunks/a84212e50fb7e1a82bb4.js +1 -0
- package/assets/esri/core/workers/chunks/ac9681ebbae83b6d8c8a.js +1 -0
- package/assets/esri/core/workers/chunks/{0efcf69bc0ed843f1c20.js → af2f48911f984a911d3d.js} +1 -1
- package/assets/esri/core/workers/chunks/c1315c5610326a98811b.js +1 -0
- package/assets/esri/core/workers/chunks/c5ddaa5d8ac5eec949cf.js +1 -0
- package/assets/esri/core/workers/chunks/ce49d6c0becb9c39ceec.js +1 -0
- package/assets/esri/core/workers/chunks/d0093ec96d21ee7fcb27.js +1 -0
- package/assets/esri/core/workers/chunks/ed2f3f32f21960305cd9.js +1 -0
- package/assets/esri/core/workers/chunks/ed3fb3ea29a2be226322.js +1 -0
- package/assets/esri/core/workers/chunks/f3550d82fd8328953ca6.js +1 -0
- package/assets/esri/core/workers/chunks/f717ca7c2581c31de7a6.js +1 -0
- package/assets/esri/core/workers/chunks/fe684aaa9dfddf1c5b22.js +1 -0
- package/assets/esri/widgets/FeatureTable/t9n/FeatureTable_en.json +1 -1
- package/chunks/Viewshed.glsl.js +2 -1
- package/core/uuid.js +1 -1
- package/geometry/operators/containsOperator.js +1 -1
- package/geometry/operators/crossesOperator.js +1 -1
- package/geometry/operators/disjointOperator.js +1 -1
- package/geometry/operators/equalsOperator.js +1 -1
- package/geometry/operators/gx/operatorIntersection.js +1 -1
- package/geometry/operators/intersectsOperator.js +1 -1
- package/geometry/operators/overlapsOperator.js +1 -1
- package/geometry/operators/relateOperator.js +1 -1
- package/geometry/operators/touchesOperator.js +1 -1
- package/geometry/operators/withinOperator.js +1 -1
- package/interfaces.d.ts +2 -2
- package/kernel.js +1 -1
- package/layers/orientedImagery/transformations/rectifyMapPoint.js +1 -1
- package/layers/save/featureLayerUtils.js +1 -1
- package/layers/save/mediaLayerUtils.js +1 -1
- package/layers/save/utils.js +1 -1
- package/layers/support/featureLayerUtils.js +1 -1
- package/package.json +1 -1
- package/smartMapping/raster/renderers/classBreaks.js +1 -1
- package/smartMapping/renderers/color.js +1 -1
- package/smartMapping/renderers/dotDensity.js +1 -1
- package/smartMapping/renderers/pieChart.js +1 -1
- package/smartMapping/renderers/predominance.js +1 -1
- package/smartMapping/renderers/relationship.js +1 -1
- package/smartMapping/renderers/size.js +1 -1
- package/smartMapping/renderers/support/regenerateUtils.js +1 -1
- package/smartMapping/renderers/support/rendererUtils.js +1 -1
- package/smartMapping/renderers/type.js +1 -1
- package/smartMapping/renderers/univariateColorSize.js +1 -1
- package/support/revision.js +1 -1
- package/symbols/cim/animationUtils.js +1 -1
- package/symbols/cim/cimAnalyzer.js +1 -1
- package/views/2d/engine/imagery/processor/bandArithmeticProcessor.js +1 -1
- package/views/2d/engine/webgl/Painter.js +1 -1
- package/views/2d/engine/webgl/effects/BlendEffect.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/blend/BlendTechnique.js +1 -1
- package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
- package/views/2d/layers/MediaLayerView2D.js +1 -1
- package/views/2d/layers/TileLayerView2D.js +1 -1
- package/views/2d/layers/features/FeatureContainer.js +1 -1
- package/views/2d/layers/features/RenderState.js +1 -1
- package/views/2d/layers/features/processor/FeatureUpdateStrategy.js +1 -1
- package/views/2d/layers/features/support/AttributeStore.js +1 -1
- package/views/2d/layers/features/support/DisplayIdGenerator.js +1 -1
- package/views/3d/layers/i3s/featureEditing.js +1 -1
- package/views/3d/layers/support/FeatureTileMeasurements3D.js +1 -1
- package/views/3d/layers/support/FeatureTileTree3D.js +1 -1
- package/views/3d/state/ViewStateManager.js +1 -1
- package/views/3d/support/cameraUtils.js +1 -1
- package/views/3d/support/viewpointUtils.js +1 -1
- package/views/interactive/snapping/featureSources/featureServiceSource/FeatureServiceTiledFetcher.js +1 -1
- package/views/webgl/FramebufferObject.js +1 -1
- package/views/webgl/TextureDescriptor.js +1 -1
- package/widgets/FeatureTable/FeatureTableViewModel.js +1 -1
- package/widgets/FeatureTable/Grid/Grid.js +1 -1
- package/widgets/FeatureTable/Grid/GridViewModel.js +1 -1
- package/widgets/FeatureTable.js +1 -1
- package/widgets/Print/PrintViewModel.js +1 -1
- package/widgets/Print.js +1 -1
- package/widgets/support/GridControls/GridControlsViewModel.js +1 -1
- package/widgets/support/GridControls.js +1 -1
- package/widgets/support/SnappingControls.js +1 -1
- package/assets/esri/core/workers/chunks/0e292550c6e214dd160b.js +0 -1
- package/assets/esri/core/workers/chunks/125433d1c1c31f29cb62.js +0 -1
- package/assets/esri/core/workers/chunks/1ab8dff1ffd2cfc606a3.js +0 -1
- package/assets/esri/core/workers/chunks/1d6c66dfeb646b2d38d0.js +0 -1
- package/assets/esri/core/workers/chunks/1f7fe71d80378b5d2acc.js +0 -1
- package/assets/esri/core/workers/chunks/214b0b234c46f1c163a2.js +0 -1
- package/assets/esri/core/workers/chunks/3645401eaceae7ca194f.js +0 -1
- package/assets/esri/core/workers/chunks/38216a3288fa3af5fa32.js +0 -1
- package/assets/esri/core/workers/chunks/4cd3c861e33366f15af8.js +0 -1
- package/assets/esri/core/workers/chunks/5af2ea57ac8c62258128.js +0 -1
- package/assets/esri/core/workers/chunks/6417fc06bbff9852426f.js +0 -1
- package/assets/esri/core/workers/chunks/6c94ce65a5399de9a0cd.js +0 -1
- package/assets/esri/core/workers/chunks/7114bcb1de727ba596be.js +0 -1
- package/assets/esri/core/workers/chunks/787e8fad19dcc5d84dd9.js +0 -1
- package/assets/esri/core/workers/chunks/837471fcf383a0f4b6ff.js +0 -1
- package/assets/esri/core/workers/chunks/877e9181a3ec40b1231a.js +0 -1
- package/assets/esri/core/workers/chunks/8a232508b7fe011154ab.js +0 -1
- package/assets/esri/core/workers/chunks/8d2aa1e054cee14df379.js +0 -1
- package/assets/esri/core/workers/chunks/9189d24f71e2e706821e.js +0 -1
- package/assets/esri/core/workers/chunks/94451bca86ccdf05974c.js +0 -1
- package/assets/esri/core/workers/chunks/9cfaf1cbbb1d6453e939.js +0 -1
- package/assets/esri/core/workers/chunks/a3767791456281861b49.js +0 -1
- package/assets/esri/core/workers/chunks/a68a141bec952373ab6f.js +0 -1
- package/assets/esri/core/workers/chunks/ab6eaa3ae2e233f91a5e.js +0 -1
- package/assets/esri/core/workers/chunks/aedb2e7cd5b3300da5fa.js +0 -1
- package/assets/esri/core/workers/chunks/b045413c44239f597cc3.js +0 -1
- package/assets/esri/core/workers/chunks/b6044b20fb38524a268f.js +0 -1
- package/assets/esri/core/workers/chunks/cca72ca3a4f90b45c2ce.js +0 -1
- package/assets/esri/core/workers/chunks/d497b6443353efc80417.js +0 -1
- package/assets/esri/core/workers/chunks/da1687d68cfe20e4f069.js +0 -1
- package/assets/esri/core/workers/chunks/f1313389eeb7a2350db3.js +0 -1
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.31/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{createUniqueColors as e}from"../../core/colorUtils.js";import n from"../../core/Error.js";import{clone as a}from"../../core/lang.js";import{fetchMessageBundle as i}from"../../intl/messages.js";import l from"../../renderers/support/AuthoringInfo.js";import{AuthoringInfoClassBreakInfo as r}from"../../renderers/support/AuthoringInfoClassBreakInfo.js";import{AuthoringInfoFieldInfo as s}from"../../renderers/support/AuthoringInfoFieldInfo.js";import{createRenderer as o}from"./type.js";import{getClassBreaks as t,verifyBasicFieldValidity as m,getBasemapInfo as d}from"./support/utils.js";import{verifyBinningParams as u}from"../support/binningUtils.js";import{binningCapableLayerTypes as f,featureCapableLayerTypes as p,createLayerAdapter as c,getLayerTypeLabels as h}from"../support/adapters/support/layerUtils.js";import{getColors as y,cloneScheme as b,getSchemes as w,flatten2DArray as v}from"../symbology/relationship.js";import{applyColorToSymbol as g}from"../../symbols/support/utils.js";const I=new Set(["equal-interval","natural-breaks","quantile"]),M=new Set(["HH","HL","LH","LL"]),V={2:[["HL","HH"],["LL","LH"]],3:[["HL","HM","HH"],["ML","MM","MH"],["LL","LM","LH"]],4:[["HL","HM1","HM2","HH"],["M2L","M2M1","M2M2","M2H"],["M1L","M1M1","M1M2","M1H"],["LL","LM1","LM2","LH"]]},z={2:["L","H"],3:["L","M","H"],4:["L","M1","M2","H"]},F=e=>({minValue:e.minValue,maxValue:e.maxValue});async function T(e){if(!(e?.layer&&e.view&&e.field1&&e.field2))throw new n("relationship-renderer:missing-parameters","'layer', 'view', 'field1' and 'field2' parameters are required");e.forBinning&&u(e,"relationship-renderer");const a={...e,layer:e.layer,field1:e.field1,field2:e.field2};if(a.symbolType??="2d",a.defaultSymbolEnabled??=!0,a.classificationMethod??="quantile",a.numClasses??=3,a.focus??=null,!I.has(a.classificationMethod))throw new n("relationship-renderer:invalid-parameters",`classification method ${a.classificationMethod} is not supported`);if(a.numClasses<2||a.numClasses>4)throw new n("relationship-renderer:invalid-parameters","'numClasses' must be 2, 3 or 4");if(e.focus&&!M.has(e.focus))throw new n("relationship-renderer:invalid-parameters","'focus' must be 'HH', 'HL', 'LH', 'LL' or null");const i=e.forBinning?f:p,l=c(a.layer,i,e.forBinning);if(!l)throw new n("relationship-renderer:invalid-parameters","'layer' must be one of these types: "+h(i).join(", "));a.layer=l;const r=null!=a.signal?{signal:a.signal}:null;await l.load(r);const s=l.geometryType,o=a.symbolType.includes("3d");if(a.outlineOptimizationEnabled="polygon"===s&&a.outlineOptimizationEnabled,a.sizeOptimizationEnabled=("point"===s||"multipoint"===s||"polyline"===s)&&a.sizeOptimizationEnabled,"mesh"===s)a.symbolType="3d-volumetric",a.colorMixMode=a.colorMixMode||"replace",a.edgesType=a.edgesType||"none";else{if("3d-volumetric-uniform"===a.symbolType&&"point"!==s)throw new n("relationship-renderer:not-supported","3d-volumetric-uniform symbols are supported for point layers only");if(o&&"polygon"===s)throw new n("relationship-renderer:not-supported","3d symbols are not supported for polygon layers");if(a.symbolType.includes("3d-volumetric")&&(!a.view||"3d"!==a.view.type))throw new n("relationship-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or '3d-volumetric-uniform'")}const{field1:t,field2:d}=a,y=[t.field,d.field];t.normalizationField&&y.push(t.normalizationField),d.normalizationField&&y.push(d.normalizationField);const b=m(l,y,"relationship-renderer:invalid-parameters");if(b)throw b;return a}async function H(e){if(!e?.renderer||!e.numClasses)throw new n("update-relationship-renderer:missing-parameters","'renderer' and 'numClasses' parameters are required");const{field1:a,field2:i,renderer:l,numClasses:r,colors:s}=e,o=r**2;if((a||i)&&!(a&&i&&a.field&&i.field))throw new n("update-relationship-renderer:missing-parameters","'field1' and 'field2' parameters are required");if(a&&!a.classBreakInfos||i&&!i.classBreakInfos)throw new n("update-relationship-renderer:missing-parameters","'field1.classBreakInfos' and 'field2.classBreakInfos' are required");if(!l.authoringInfo)throw new n("update-relationship-renderer:missing-parameters","'renderer.authoringInfo' is required");if(l.uniqueValueInfos?.length!==o)throw new n("update-relationship-renderer:invalid-parameters",`Renderer must have ${o} unique value infos to support ${r} classes`);if(s&&s.length!==o)throw new n("update-relationship-renderer:invalid-parameters",`The scheme must have ${o} colors`);return e}async function L(e){let n=e.relationshipScheme,a=null,i=null;const l=await d(e.basemap,e.view);if(a=null!=l.basemapId?l.basemapId:null,i=null!=l.basemapTheme?l.basemapTheme:null,n)return{scheme:b(n),basemapId:a,basemapTheme:i};const r=w({basemapTheme:i,geometryType:e.geometryType,theme:e.theme,worldScale:e.worldScale,view:e.view});return r&&(n=r.primaryScheme,a=r.basemapId,i=r.basemapTheme),{scheme:n,basemapId:a,basemapTheme:i}}function k(e,n){const i=a(V[e]);return v(i,n)}function x(e,n){return k(e,n).map((e=>({value:e,count:0})))}function C(e,n,a,i){const{field:l,normalizationField:r}=e,{field:s,normalizationField:o}=n,t=a.map((e=>[e.minValue,e.maxValue])),m=i.map((e=>[e.minValue,e.maxValue])),d=t.length,u=z[d];return`\n var field1 = $feature['${l}'];\n var field2 = $feature['${s}'];\n var hasNormField1 = ${r?"true":"false"};\n var hasNormField2 = ${o?"true":"false"};\n var normField1 = ${r?`$feature['${r}']`:"null"};\n var normField2 = ${o?`$feature['${o}']`:"null"};\n\n if (\n IsEmpty(field1) ||\n IsEmpty(field2) ||\n (hasNormField1 && (IsEmpty(normField1) || normField1 == 0)) ||\n (hasNormField2 && (IsEmpty(normField2) || normField2 == 0))\n ) {\n return null;\n }\n\n var value1 = IIf(hasNormField1, (field1 / normField1), field1);\n var value2 = IIf(hasNormField2, (field2 / normField2), field2);\n\n var breaks1 = ${JSON.stringify(t)};\n var breaks2 = ${JSON.stringify(m)};\n var classCodes = ${JSON.stringify(u)};\n\n function getClassCode(value, breaks) {\n var code = null;\n\n for (var i in breaks) {\n var info = breaks[i];\n if (value >= info[0] && value <= info[1]) {\n code = classCodes[i];\n break;\n }\n }\n\n return code;\n }\n\n var code1 = getClassCode(value1, breaks1);\n var code2 = getClassCode(value2, breaks2);\n\n var classValue = IIf(IsEmpty(code1) || IsEmpty(code2), null, code1 + code2);\n return classValue;\n `}async function E(e,a,t){const m=await i("esri/smartMapping/t9n/smartMapping"),{basemap:d,classificationMethod:u,field1:f,field2:p,focus:c,numClasses:h,signal:b}=e,w=e.layer,v=a.classBreakInfos,g=t.classBreakInfos;if(h!==v.length||v.length!==g.length)throw new n("relationship-renderer:error","incompatible class breaks");const I=x(h,c),M=C(e.field1,e.field2,v,g),V=(await L({basemap:d,geometryType:w.geometryType,theme:"default",relationshipScheme:e.relationshipScheme,worldScale:!!e.symbolType?.includes("3d-volumetric"),view:e.view})).scheme,z=await o({layer:w,basemap:d,valueExpression:M,valueExpressionTitle:m.relationship.legendTitle,numTypes:-1,sortEnabled:!1,defaultSymbolEnabled:e.defaultSymbolEnabled,typeScheme:{colors:y(V,h,c),...V},statistics:{uniqueValueInfos:I},legendOptions:e.legendOptions,outlineOptimizationEnabled:e.outlineOptimizationEnabled,sizeOptimizationEnabled:e.sizeOptimizationEnabled,symbolType:e.symbolType,colorMixMode:e.colorMixMode,edgesType:e.edgesType,filter:e.filter,view:e.view,signal:b}),F=z.renderer,T=F.uniqueValueInfos,H=m.relationship;for(const n of T??[])n.label=H[n.value];const k=new l({type:"relationship",classificationMethod:u,numClasses:h,focus:c,field1:new s({field:f.field,normalizationField:f.normalizationField,label:f.label,classBreakInfos:v.map((({minValue:e,maxValue:n})=>new r({minValue:e,maxValue:n})))}),field2:new s({field:p.field,normalizationField:p.normalizationField,label:p.label,classBreakInfos:g.map((({minValue:e,maxValue:n})=>new r({minValue:e,maxValue:n})))})});return F.authoringInfo=k,{renderer:F,classBreaks:{field1:a,field2:t},uniqueValueInfos:z.uniqueValueInfos,relationshipScheme:V,basemapId:z.basemapId,basemapTheme:z.basemapTheme}}function B(e,n,a){const i=k(n,a);e.sort(((e,n)=>{const a=i.indexOf(e.value),l=i.indexOf(n.value);let r=0;return a<l?r=-1:a>l&&(r=1),r}))}function $(e,n){e.authoringInfo??=new l;const a=e.authoringInfo;a.numClasses=n.numClasses,a.focus=n.focus||null,a.focus||delete a.focus;const{field1:i,field2:o}=n;a.field1=new s({field:i.field,normalizationField:i.normalizationField,label:i.label,classBreakInfos:i.classBreakInfos.map((e=>new r(F(e))))}),a.field2=new s({field:o.field,normalizationField:o.normalizationField,label:o.label,classBreakInfos:o.classBreakInfos.map((e=>new r(F(e))))}),e.authoringInfo=a}async function S(n){const a=await H(n),{field1:i,field2:l,renderer:r,numClasses:s,focus:o,colors:t}=a,m=r.clone();m.valueExpression=C(i,l,i.classBreakInfos,l.classBreakInfos);const d=m.uniqueValueInfos??[];if(B(d,s,o),t){const n=e(t,t.length);d.forEach(((e,a)=>g(e.symbol,n[a])))}return $(m,a),m}async function q(e){const a=await T(e),{layer:i,classificationMethod:l,field1:r,field2:s,numClasses:o,view:m,signal:d,filter:u}=a,f={layer:i,classificationMethod:l,field:r.field,normalizationField:r.normalizationField,normalizationType:r.normalizationField?"field":null,minValue:r.minValue,maxValue:r.maxValue,analyzeData:!(null!=r.minValue&&null!=r.maxValue),numClasses:o,filter:u,view:m,signal:d},p={layer:i,classificationMethod:l,field:s.field,normalizationField:s.normalizationField,normalizationType:s.normalizationField?"field":null,minValue:s.minValue,maxValue:s.maxValue,analyzeData:!(null!=s.minValue&&null!=s.maxValue),numClasses:o,filter:u,view:m,signal:d},[c,h]=await Promise.all([t(f),t(p)]);if(!c||!h)throw new n("relationship-renderer:error","error when calculating class breaks");return E(a,c.result,h.result)}export{q as createRenderer,S as updateRenderer};
|
|
5
|
+
import{createUniqueColors as e}from"../../core/colorUtils.js";import i from"../../core/Error.js";import{clone as a}from"../../core/lang.js";import{fetchMessageBundle as n}from"../../intl/messages.js";import l from"../../renderers/support/AuthoringInfo.js";import{AuthoringInfoClassBreakInfo as r}from"../../renderers/support/AuthoringInfoClassBreakInfo.js";import{AuthoringInfoFieldInfo as s}from"../../renderers/support/AuthoringInfoFieldInfo.js";import o from"../heuristics/outline.js";import t from"../heuristics/sizeRange.js";import{createRenderer as d}from"./type.js";import{spliceVisualVariables as m,findOutlineVVIndex as u,findScaleDependentSizeVVIndex as f,processRegenerateParams as p,getRendererToUpdate as c,getStyleType as h,hasOutlineVV as y,hasScaleDependentSizeVV as w}from"./support/regenerateUtils.js";import{errorCallback as b,verifyBasicFieldValidity as v,getClassBreaks as g,getBasemapInfo as I}from"./support/utils.js";import{verifyBinningParams as z}from"../support/binningUtils.js";import{binningCapableLayerTypes as M,featureCapableLayerTypes as F,createLayerAdapter as V,getLayerTypeLabels as T}from"../support/adapters/support/layerUtils.js";import{getColors as k,cloneScheme as H,getSchemes as L,flatten2DArray as C}from"../symbology/relationship.js";import{applyColorToSymbol as E}from"../../symbols/support/utils.js";const B=new Set(["equal-interval","natural-breaks","quantile"]),x=new Set(["HH","HL","LH","LL"]),$={2:[["HL","HH"],["LL","LH"]],3:[["HL","HM","HH"],["ML","MM","MH"],["LL","LM","LH"]],4:[["HL","HM1","HM2","HH"],["M2L","M2M1","M2M2","M2H"],["M1L","M1M1","M1M2","M1H"],["LL","LM1","LM2","LH"]]},O={2:["L","H"],3:["L","M","H"],4:["L","M1","M2","H"]},S=e=>({minValue:e.minValue,maxValue:e.maxValue});async function j(e){if(!(e?.layer&&e.view&&e.field1&&e.field2))throw new i("relationship-renderer:missing-parameters","'layer', 'view', 'field1' and 'field2' parameters are required");e.forBinning&&z(e,"relationship-renderer");const a={...e,layer:e.layer,field1:e.field1,field2:e.field2};if(a.symbolType??="2d",a.defaultSymbolEnabled??=!0,a.classificationMethod??="quantile",a.numClasses??=3,a.focus??=null,!B.has(a.classificationMethod))throw new i("relationship-renderer:invalid-parameters",`classification method ${a.classificationMethod} is not supported`);if(a.numClasses<2||a.numClasses>4)throw new i("relationship-renderer:invalid-parameters","'numClasses' must be 2, 3 or 4");if(e.focus&&!x.has(e.focus))throw new i("relationship-renderer:invalid-parameters","'focus' must be 'HH', 'HL', 'LH', 'LL' or null");const n=e.forBinning?M:F,l=V(a.layer,n,e.forBinning);if(!l)throw new i("relationship-renderer:invalid-parameters","'layer' must be one of these types: "+T(n).join(", "));const r=null!=a.signal?{signal:a.signal}:null;await l.load(r);const s=l.geometryType,o=a.symbolType.includes("3d");if(a.outlineOptimizationEnabled="polygon"===s&&a.outlineOptimizationEnabled,a.sizeOptimizationEnabled=("point"===s||"multipoint"===s||"polyline"===s)&&a.sizeOptimizationEnabled,"mesh"===s)a.symbolType="3d-volumetric",a.colorMixMode=a.colorMixMode||"replace",a.edgesType=a.edgesType||"none";else{if("3d-volumetric-uniform"===a.symbolType&&"point"!==s)throw new i("relationship-renderer:not-supported","3d-volumetric-uniform symbols are supported for point layers only");if(o&&"polygon"===s)throw new i("relationship-renderer:not-supported","3d symbols are not supported for polygon layers");if(a.symbolType.includes("3d-volumetric")&&(!a.view||"3d"!==a.view.type))throw new i("relationship-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or '3d-volumetric-uniform'")}const{field1:t,field2:d}=a,m=[t.field,d.field];t.normalizationField&&m.push(t.normalizationField),d.normalizationField&&m.push(d.normalizationField);const u=v(l,m,"relationship-renderer:invalid-parameters");if(u)throw u;return{...a,layer:l}}async function q(e){const a="regenerate-relationship-renderer";await p(e,a);const n=await c(e),l=h(n);if(!l||!["relationship","relationship-size"].includes(l))throw new i(`${a}:invalid-parameters`,"Renderer is invalid");const{layer:r,forBinning:s,filter:o,view:t,signal:d}=e,m=y(n),u=w(n),{field1:f,field2:b,classificationMethod:v,focus:g,numClasses:I}=n.authoringInfo,z={field:f.field,normalizationField:f.normalizationField,label:f.label},M={field:b.field,normalizationField:b.normalizationField,label:b.label},F=await j({layer:r,field1:z,field2:M,classificationMethod:v,numClasses:I,focus:g,outlineOptimizationEnabled:m,sizeOptimizationEnabled:u,forBinning:s,filter:o,view:t,signal:d});return{...e,creatorParameters:F,renderer:n}}async function N(e){if(!e?.renderer||!e.numClasses)throw new i("update-relationship-renderer:missing-parameters","'renderer' and 'numClasses' parameters are required");const{field1:a,field2:n,renderer:l,numClasses:r,colors:s}=e,o=r**2;if((a||n)&&!(a&&n&&a.field&&n.field))throw new i("update-relationship-renderer:missing-parameters","'field1' and 'field2' parameters are required");if(a&&!a.classBreakInfos||n&&!n.classBreakInfos)throw new i("update-relationship-renderer:missing-parameters","'field1.classBreakInfos' and 'field2.classBreakInfos' are required");if(!l.authoringInfo)throw new i("update-relationship-renderer:missing-parameters","'renderer.authoringInfo' is required");if(l.uniqueValueInfos?.length!==o)throw new i("update-relationship-renderer:invalid-parameters",`Renderer must have ${o} unique value infos to support ${r} classes`);if(s&&s.length!==o)throw new i("update-relationship-renderer:invalid-parameters",`The scheme must have ${o} colors`);return e}async function P(e){let i=e.relationshipScheme,a=null,n=null;const l=await I(e.basemap,e.view);if(a=null!=l.basemapId?l.basemapId:null,n=null!=l.basemapTheme?l.basemapTheme:null,i)return{scheme:H(i),basemapId:a,basemapTheme:n};const r=L({basemapTheme:n,geometryType:e.geometryType,theme:e.theme,worldScale:e.worldScale,view:e.view});return r&&(i=r.primaryScheme,a=r.basemapId,n=r.basemapTheme),{scheme:i,basemapId:a,basemapTheme:n}}function R(e,i){const n=a($[e]);return C(n,i)}function U(e,i){return R(e,i).map((e=>({value:e,count:0})))}function A(e,i,a,n){const{field:l,normalizationField:r}=e,{field:s,normalizationField:o}=i,t=a.map((e=>[e.minValue,e.maxValue])),d=n.map((e=>[e.minValue,e.maxValue])),m=t.length,u=O[m];return`\n var field1 = $feature['${l}'];\n var field2 = $feature['${s}'];\n var hasNormField1 = ${r?"true":"false"};\n var hasNormField2 = ${o?"true":"false"};\n var normField1 = ${r?`$feature['${r}']`:"null"};\n var normField2 = ${o?`$feature['${o}']`:"null"};\n\n if (\n IsEmpty(field1) ||\n IsEmpty(field2) ||\n (hasNormField1 && (IsEmpty(normField1) || normField1 == 0)) ||\n (hasNormField2 && (IsEmpty(normField2) || normField2 == 0))\n ) {\n return null;\n }\n\n var value1 = IIf(hasNormField1, (field1 / normField1), field1);\n var value2 = IIf(hasNormField2, (field2 / normField2), field2);\n\n var breaks1 = ${JSON.stringify(t)};\n var breaks2 = ${JSON.stringify(d)};\n var classCodes = ${JSON.stringify(u)};\n\n function getClassCode(value, breaks) {\n var code = null;\n\n for (var i in breaks) {\n var info = breaks[i];\n if (value >= info[0] && value <= info[1]) {\n code = classCodes[i];\n break;\n }\n }\n\n return code;\n }\n\n var code1 = getClassCode(value1, breaks1);\n var code2 = getClassCode(value2, breaks2);\n\n var classValue = IIf(IsEmpty(code1) || IsEmpty(code2), null, code1 + code2);\n return classValue;\n `}async function J(e,a,o){const t=await n("esri/smartMapping/t9n/smartMapping"),{basemap:m,classificationMethod:u,field1:f,field2:p,focus:c,numClasses:h,signal:y}=e,w=e.layer,b=a.classBreakInfos,v=o.classBreakInfos;if(h!==b.length||b.length!==v.length)throw new i("relationship-renderer:error","incompatible class breaks");const g=U(h,c),I=A(e.field1,e.field2,b,v),z=(await P({basemap:m,geometryType:w.geometryType,theme:"default",relationshipScheme:e.relationshipScheme,worldScale:!!e.symbolType?.includes("3d-volumetric"),view:e.view})).scheme,M=await d({layer:w,basemap:m,valueExpression:I,valueExpressionTitle:t.relationship.legendTitle,numTypes:-1,sortEnabled:!1,defaultSymbolEnabled:e.defaultSymbolEnabled,typeScheme:{colors:k(z,h,c),...z},statistics:{uniqueValueInfos:g},legendOptions:e.legendOptions,outlineOptimizationEnabled:e.outlineOptimizationEnabled,sizeOptimizationEnabled:e.sizeOptimizationEnabled,symbolType:e.symbolType,colorMixMode:e.colorMixMode,edgesType:e.edgesType,filter:e.filter,view:e.view,signal:y}),F=M.renderer,V=F.uniqueValueInfos,T=t.relationship;for(const i of V??[])i.label=T[i.value];const H=new l({type:"relationship",classificationMethod:u,numClasses:h,focus:c,field1:new s({field:f.field,normalizationField:f.normalizationField,label:f.label,classBreakInfos:b.map((({minValue:e,maxValue:i})=>new r({minValue:e,maxValue:i})))}),field2:new s({field:p.field,normalizationField:p.normalizationField,label:p.label,classBreakInfos:v.map((({minValue:e,maxValue:i})=>new r({minValue:e,maxValue:i})))})});return F.authoringInfo=H,{renderer:F,classBreaks:{field1:a,field2:o},uniqueValueInfos:M.uniqueValueInfos,relationshipScheme:z,basemapId:M.basemapId,basemapTheme:M.basemapTheme}}function D(e,i,a){const n=R(i,a);e.sort(((e,i)=>{const a=n.indexOf(e.value),l=n.indexOf(i.value);let r=0;return a<l?r=-1:a>l&&(r=1),r}))}function G(e,i){e.authoringInfo??=new l;const a=e.authoringInfo;a.numClasses=i.numClasses,a.focus=i.focus||null,a.focus||delete a.focus;const{field1:n,field2:o}=i;a.field1=new s({field:n.field,normalizationField:n.normalizationField,label:n.label,classBreakInfos:n.classBreakInfos.map((e=>new r(S(e))))}),a.field2=new s({field:o.field,normalizationField:o.normalizationField,label:o.label,classBreakInfos:o.classBreakInfos.map((e=>new r(S(e))))}),e.authoringInfo=a}async function K(e){const{layer:a,classificationMethod:n,field1:l,field2:r,numClasses:s,filter:o,view:t,signal:d}=e,m={layer:a,classificationMethod:n,field:l.field,normalizationField:l.normalizationField,normalizationType:l.normalizationField?"field":null,minValue:l.minValue,maxValue:l.maxValue,analyzeData:!(null!=l.minValue&&null!=l.maxValue),numClasses:s,filter:o,view:t,signal:d},u={layer:a,classificationMethod:n,field:r.field,normalizationField:r.normalizationField,normalizationType:r.normalizationField?"field":null,minValue:r.minValue,maxValue:r.maxValue,analyzeData:!(null!=r.minValue&&null!=r.maxValue),numClasses:s,filter:o,view:t,signal:d},[f,p]=await Promise.all([g(m),g(u)]);if(!f||!p)throw new i("relationship-renderer:error","error when calculating class breaks");return{field1:f.result,field2:p.result}}async function Q(i){const a=await N(i),{field1:n,field2:l,renderer:r,numClasses:s,focus:o,colors:t}=a,d=r.clone();d.valueExpression=A(n,l,n.classBreakInfos,l.classBreakInfos);const m=d.uniqueValueInfos??[];if(D(m,s,o),t){const i=e(t,t.length);m.forEach(((e,a)=>E(e.symbol,i[a])))}return G(d,a),d}async function W(e){const i=await j(e),{field1:a,field2:n}=await K(i);return J(i,a,n)}async function X(e){const{creatorParameters:i,view:a,signal:n,filter:l,renderer:r}=await q(e),{layer:s,field1:d,field2:p,numClasses:c,focus:h,outlineOptimizationEnabled:y,sizeOptimizationEnabled:w}=i,{field1:v,field2:g}=await K(i),[I,z,M]=await Promise.all([Q({field1:{...d,classBreakInfos:v.classBreakInfos},field2:{...p,classBreakInfos:g.classBreakInfos},renderer:r,numClasses:c,focus:h}),y?o({layer:s,view:a,signal:n,filter:l}).catch(b):null,w?t({layer:s,view:a,signal:n,filter:l}).catch(b):null]);return m(I,z?.visualVariables,u),m(I,M?.minSize,f),{renderer:I}}export{W as createRenderer,X as regenerateRenderer,Q as updateRenderer};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.31/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../renderers/ClassBreaksRenderer.js";import"../../renderers/DictionaryRenderer.js";import"../../renderers/DotDensityRenderer.js";import"../../renderers/HeatmapRenderer.js";import"../../renderers/PieChartRenderer.js";import"../../renderers/Renderer.js";import"../../renderers/SimpleRenderer.js";import"../../renderers/UniqueValueRenderer.js";import"../../renderers/support/jsonUtils.js";import"../../core/Logger.js";import{createUniqueColors as i}from"../../core/colorUtils.js";import a from"../../core/Error.js";import{toPt as r}from"../../core/screenUtils.js";import{ensureClass as n}from"../../core/accessorSupport/ensureType.js";import{fetchMessageBundle as s}from"../../intl/messages.js";import l from"../../renderers/support/AuthoringInfo.js";import t from"../../renderers/support/AuthoringInfoSizeStop.js";import o from"../../renderers/support/AuthoringInfoVisualVariable.js";import{setLabelsForClassBreaks as m}from"../../renderers/support/utils.js";import u from"../../renderers/visualVariables/SizeVariable.js";import{castSizeFromStringOrNumber as d}from"../../renderers/visualVariables/support/castSizeVariable.js";import p from"../../renderers/visualVariables/support/SizeVariableLegendOptions.js";import{TransformationType as c}from"../../renderers/visualVariables/support/sizeVariableUtils.js";import f from"../heuristics/ageUnit.js";import y from"../heuristics/outline.js";import v from"../heuristics/referenceSize.js";import z from"../heuristics/sizeRange.js";import{getReferenceSizeStops as w,createPrimitiveOverrides as b,updateReferenceSizeSymbol as h,createReferenceSizeSymbol as g}from"./support/referenceSizeUtils.js";import{isSizeVV as S,spliceVisualVariables as x,findSizeVVIndex as E,findOutlineVVIndex as T,processRegenerateParams as V,getRendererToUpdate as I,hasScaleDependentSizeVV as O,getStyleType as k,hasOutlineVV as B}from"./support/regenerateUtils.js";import{getSummaryStatistics as j,errorCallback as R,getClassBreaks as F,getTitleAndExpressionForAgeRenderer as q,updateAgeRendererAuthoringInfoVV as D,verifyBasicFieldValidity as U,getDataRange as P,getSizeRangeForAxis as G,createSymbol as M,getSymbolOutlineFromScheme as C,getSymbolSizeFromScheme as $,getBasemapInfo as A}from"./support/utils.js";import{verifyDates as L,supportedAgeUnits as W}from"../statistics/support/ageUtils.js";import{verifyBinningParams as H}from"../support/binningUtils.js";import{getFieldsList as J,getNormalizationType as K,isAnyDateField as N}from"../support/utils.js";import{binningCapableLayerTypes as Q,featureCapableLayerTypes as X,createLayerAdapter as Y,getLayerTypeLabels as Z}from"../support/adapters/support/layerUtils.js";import{cloneScheme as _,getSchemes as ee}from"../symbology/size.js";import{getColorFromSymbol as ie}from"../../symbols/support/utils.js";const ae=2**53-1;async function re(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new a("size-visual-variable:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new a("size-visual-variable:missing-parameters","View is required when 'valueExpression' is specified");if("reference-size"===e.theme&&!e.view&&!e.field)throw new a("size-visual-variable:missing-parameters","'view' and 'field' are required when 'theme' is 'reference-size'");if("reference-size"===e.theme&&e.valueExpression)throw new a("size-visual-variable:missing-parameters","'valueExpression' is not supported when 'theme' is 'reference-size'");e.forBinning&&H(e,"size-visual-variable");const i={...e},r=e.forBinning?Q:X,n=Y(i.layer,r,e.forBinning);if(!n)throw new a("size-visual-variable:invalid-parameters","'layer' must be one of these types: "+Z(r).join(", "));"height"===i.axis&&(i.sizeOptimizationEnabled=!1);const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType;if("mesh"===l)throw new a("size-visual-variable:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(i.worldScale){if("polyline"===l||"polygon"===l)throw new a("size-visual-variable:not-supported","'worldScale' sizing is not supported for polyline and polygon layers");if(!i.view||"3d"!==i.view.type)throw new a("size-visual-variable:invalid-parameters","'view' parameter should be an instance of SceneView when 'worldScale' parameter is true")}if("reference-size"===i.theme&&!e.forBinning&&"polygon"!==l)throw new a("size-visual-variable:invalid-parameters","Reference size is only supported for polygon layers");const t=await J({field:i.field,normalizationField:i.normalizationField,valueExpression:i.valueExpression}),o=U(n,t,"size-visual-variable:invalid-parameters");if(o)throw o;return await se(i),{...i,layer:n}}async function ne(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new a("size-continuous-renderer:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new a("size-continuous-renderer:missing-parameters","View is required when 'valueExpression' is specified");e.forBinning&&H(e,"size-continuous-renderer");const i={...e};i.symbolType=i.symbolType||"2d",i.defaultSymbolEnabled??=!0;const r=e.forBinning?Q:X,n=Y(i.layer,r,e.forBinning);if(!n)throw new a("size-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+Z(r).join(", "));const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType,t=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="reference-size"!==i.theme&&"polygon"===l&&i.outlineOptimizationEnabled,"mesh"===l)throw new a("size-continuous-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(t&&("polyline"===l||"polygon"===l))throw new a("size-continuous-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new a("size-continuous-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");if("reference-size"===i.theme&&!e.forBinning&&"polygon"!==l)throw new a("size-continuous-renderer:invalid-parameters","Reference size is only supported for polygon layers");const o=await J({field:i.field,normalizationField:i.normalizationField,valueExpression:i.valueExpression}),m=U(n,o,"size-continuous-renderer:invalid-parameters");if(m)throw m;return await se(i),{...i,layer:n}}async function se(e){const i=e.layer;if(("polygon"===i.geometryType||e.forBinning)&&e.view&&e.field&&!e.valueExpression&&(!e.theme||"reference-size"===e.theme)){try{e.referenceSizeResult=e.referenceSizeResult??await v({layer:i,view:e.view,filter:e.filter,forBinning:e.forBinning,signal:e.signal})}catch{}!e.theme&&e.referenceSizeResult?.isGrid&&(e.theme="reference-size"),e.referenceSizeOptions?.symbolStyle||(e.referenceSizeOptions?e.referenceSizeOptions.symbolStyle="circle":e.referenceSizeOptions={symbolStyle:"circle"})}}async function le(e){if(!e||!(e.layer&&e.view&&e.sizeStops))throw new a("update-renderer-with-reference-size:missing-parameters","'layer', 'view and 'sizeStops' parameters are required");const{view:i,forBinning:r}=e,n=e.forBinning?Q:X,s=Y(e.layer,n,e.forBinning);if(!s)throw new a("update-renderer-with-reference-size:invalid-parameters","'layer' must be one of these types: "+Z(n).join(", "));const l=s.layer;let t=e.renderer;if(!t)if(e.forBinning){if(!("featureReduction"in l&&l.featureReduction&&"renderer"in l.featureReduction&&l.featureReduction.renderer)||"class-breaks"!==l.featureReduction.renderer.type&&"unique-value"!==l.featureReduction.renderer.type)throw new a("update-renderer-with-reference-size:invalid-parameters","Feature reduction renderer is not supported");t=l.featureReduction.renderer}else{if(!("renderer"in l)||!l.renderer||"class-breaks"!==l.renderer.type&&"unique-value"!==l.renderer.type)throw new a("update-renderer-with-reference-size:invalid-parameters","Renderer is not supported");t=l.renderer}const o=t.authoringInfo;if(!o||!o?.visualVariables?.some((e=>"reference-size"===e.theme)))throw new a("update-renderer-with-reference-size:invalid-parameters","'renderer.authoringInfo.visualVariables' should have an authoringInfoVisualVariable with 'theme' set to 'reference-size'");const m=e.referenceSizeResult??await v({view:i,layer:l,forBinning:r});return{...e,referenceSizeResult:m,renderer:t,layer:s}}async function te(e){if(!e||!e.layer||!e.field&&!e.valueExpression)throw new a("size-class-breaks-renderer:missing-parameters","'layer' and 'field' or 'valueExpression' parameters are required");if(e.valueExpression&&!e.view)throw new a("size-class-breaks-renderer:missing-parameters","View is required when 'valueExpression' is specified");e.forBinning&&H(e,"size-class-breaks-renderer");const i={...e};i.symbolType=i.symbolType||"2d",i.defaultSymbolEnabled??=!0,i.classificationMethod??="equal-interval",i.normalizationType=K(i);const r=e.forBinning?Q:X,n=Y(i.layer,r,e.forBinning);if(!n)throw new a("size-class-breaks-renderer:invalid-parameters","'layer' must be one of these types: "+Z(r).join(", "));if(!(null!=i.minValue&&null!=i.maxValue)&&(null!=i.minValue||null!=i.maxValue))throw new a("size-class-breaks-renderer:missing-parameters","Both 'minValue' and 'maxValue' are required when specifying custom data range");const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType,t=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="polygon"===l&&i.outlineOptimizationEnabled,"mesh"===l)throw new a("size-class-breaks-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(t&&("polyline"===l||"polygon"===l))throw new a("size-class-breaks-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new a("size-class-breaks-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");const o=await J({field:i.field,normalizationField:i.normalizationField}),m=U(n,o,"size-class-breaks-renderer:invalid-parameters");if(m)throw m;return{...i,layer:n}}function oe(e){const i={...e};delete i.basemap,delete i.sizeScheme,delete i.legendOptions,delete i.symbolType,delete i.defaultSymbolEnabled;const a=i;return a.analyzeData=!(null!=i.minValue&&null!=i.maxValue),a}function me(e){const i={...e},a=!!i.symbolType?.includes("3d-volumetric"),r=i;return r.worldScale=a,a&&(r.axis="3d-volumetric-uniform"===i.symbolType?"all":"height"),delete i.symbolType,delete i.defaultSymbolEnabled,r}async function ue(e){if(!(e&&e.layer&&e.view&&e.startTime&&e.endTime))throw new a("size-age-renderer:missing-parameters","'layer', 'view', 'startTime', 'endTime' parameters are required");const i={...e};i.symbolType??="2d",i.defaultSymbolEnabled??=!0;const r=Y(i.layer,X);if(!r)throw new a("size-age-renderer:invalid-parameters","'layer' must be one of these types: "+Z(X).join(", "));const n=null!=i.signal?{signal:i.signal}:null;await r.load(n);const s=r.geometryType,l=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="polygon"===s&&i.outlineOptimizationEnabled,"mesh"===s)throw new a("size-age-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(l&&("polyline"===s||"polygon"===s))throw new a("size-age-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new a("size-age-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");const t=L(r,i.startTime,i.endTime,"size-age-renderer:invalid-parameters");if(t)throw t;if(i.unit&&!W.includes(i.unit))throw new a("size-age-renderer:invalid-unit",`Supported units are: ${W.join(", ")}`);return{...i,layer:r}}async function de(e){const i="regenerate-size-visual-variables";V(e,i);const r=await I(e);if("class-breaks"!==r?.type)throw new a(`${i}:invalid-parameters`,"Renderer must be a ClassBreaksRenderer to regenerate a size visual variable");const n=r.authoringInfo?.visualVariables.find((e=>"size"===e.type));if(!n)throw new a(`${i}:invalid-parameters`,"Renderer does not have a size visual variable authoringInfo");const s="reference-size"===n.theme,l=r.visualVariables?.find(S);if(!l&&!s)throw new a(`${i}:invalid-parameters`,"Renderer does not have a size visual variable");const t=l?.field??r.field,o=l?.normalizationField??r.normalizationField,m=l?.valueExpression??r.valueExpression,u=l?.valueExpressionTitle??r.valueExpressionTitle,d=n.theme,{layer:p,forBinning:c,filter:f,view:y,signal:v}=e,z=O(r),w=await re({layer:p,field:t,valueExpression:m,valueExpressionTitle:u,normalizationField:o,theme:d,sizeOptimizationEnabled:z,forBinning:c,filter:f,view:y,signal:v});return{...e,creatorParameters:w,renderer:r}}async function pe(e){const i="regenerate-size-continuous-renderer";V(e,i);const r=await I(e);if("size-continuous"!==k(r))throw new a(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:n,field:s,normalizationField:l,valueExpression:t,valueExpressionTitle:o}=r,m=n?.visualVariables.find((e=>"size"===e.type)),u=m.theme,{layer:d,forBinning:p,filter:c,view:f,signal:y}=e,v=B(r),z=O(r),w=await ne({layer:d,field:s,valueExpression:t,valueExpressionTitle:o,normalizationField:l,theme:u,outlineOptimizationEnabled:v,sizeOptimizationEnabled:z,forBinning:p,filter:c,view:f,signal:y});return{...e,creatorParameters:w,renderer:r}}async function ce(e){const i="regenerate-size-class-breaks-renderer";await V(e,i);const r=await I(e);if("size-class-breaks"!==k(r))throw new a(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:n,field:s,normalizationField:l,normalizationType:t,normalizationTotal:o,valueExpression:m,valueExpressionTitle:u}=r,{classificationMethod:d,standardDeviationInterval:p}=n,c=r.classBreakInfos.length,{layer:f,forBinning:y,filter:v,view:z,signal:w}=e,b=B(r),h=await te({layer:f,field:s,valueExpression:m,valueExpressionTitle:u,normalizationType:t,normalizationField:l,normalizationTotal:o,classificationMethod:d,standardDeviationInterval:p,numClasses:c,outlineOptimizationEnabled:b,forBinning:y,filter:v,view:z,signal:w});return{...e,creatorParameters:h,renderer:r}}async function fe(e){const i="regenerate-size-age-renderer";await V(e,i);const r=await I(e);if("size-age"!==k(r))throw new a(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:n}=r,s=n?.visualVariables.find((e=>"size"===e.type)),l=s.startTime,t=s.endTime,o=s.units,m=s.theme,{layer:u,filter:d,view:p,signal:c}=e,f=B(r),y=O(r),v=await ue({layer:u,startTime:l,endTime:t,unit:o,theme:m,outlineOptimizationEnabled:f,sizeOptimizationEnabled:y,filter:d,view:p,signal:c});return{...e,creatorParameters:v,renderer:r}}async function ye(e){let i=e.sizeScheme,a=null,r=null;const n=await A(e.basemap,e.view);if(a=null!=n.basemapId?n.basemapId:null,r=null!=n.basemapTheme?n.basemapTheme:null,i)return{scheme:_(i),basemapId:a,basemapTheme:r};const s=ee({basemapTheme:r,geometryType:e.geometryType,worldScale:e.worldScale,view:e.view});return s&&(i=s.primaryScheme,a=s.basemapId,r=s.basemapTheme),{scheme:i,basemapId:a,basemapTheme:r}}function ve(e,i){switch(i){case"point":case"multipoint":{const i=e;return[d(i.minSize),d(i.maxSize)]}case"polyline":{const i=e;return[d(i.minWidth),d(i.maxWidth)]}case"polygon":{const i=e;return[d(i.marker.minSize),d(i.marker.maxSize)]}}}function ze(e,i){e.transformationType===c.ClampedLinear&&"below"===i&&e.flipSizes()}async function we(e,i,a,r,n){return"reference-size"===a&&i?[1,i.size]:e?[e.minSize,e.maxSize]:ve(r,n)}function be(e,i,a){return"reference-size"===a&&i?[1,i.size]:e?[e.minSize,e.maxSize]:null}function he(e,i){if("reference-size"===i.theme&&null!=e.min&&null!=e.max&&null!=e.avg&&null!=e.stddev){const i=100,a=0,r=0,n=1,s=e.avg,l=e.min,t=e.max,o=e.stddev,m=0!==s?o/s:0,u=l>r&&l<n&&t<2*n&&m<.5,d=l>a&&l<i&&t<2*i&&m<.5;return{minDataValue:u?r:d?a:l,maxDataValue:u?n:d?i:s+2*o,defaultValuesUsed:!1}}const{theme:a,field:r}=i,n=i.layer,s=r&&!("function"==typeof r)?n.getField(r):null,l=N(s);return P(e,a,l,"above"===a||"below"===a)}async function ge(e,i,r,s){const{theme:m,field:d,normalizationField:c,minValue:f,maxValue:y,axis:v}=e,z=e.layer.geometryType,b=await ye({basemap:e.basemap,geometryType:z,sizeScheme:e.sizeScheme,worldScale:e.worldScale,view:e.view}),h=b.scheme;if(!h)throw new a("size-visual-variable:insufficient-info","Unable to find size scheme");const g=await we(r,s,m,h,z),{minDataValue:S,maxDataValue:x,defaultValuesUsed:E}=he(i,e),T=[],V="height"===v,I=V?v:void 0,O=g[0];let k=g[1];if(V&&"number"==typeof O&&"number"==typeof k){const e=G({minSize:O,maxSize:k},I);T.push(new u({axis:"width-and-depth",minSize:e.minSize})),k=e.maxSize}const B=new u({field:d??void 0,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,valueUnit:"unknown",normalizationField:c,axis:I,minSize:O,maxSize:k,minDataValue:S,maxDataValue:x,legendOptions:n(p,e.legendOptions)});ze(B,m),T.unshift(B);const j=new o("reference-size"===m?{type:"size",field:e.field,normalizationField:e.normalizationField,sizeStops:w(B).map((({label:e,size:i,value:a})=>new t({label:e,size:i,value:a}))),theme:m,referenceSizeScale:s?.isGrid||e.sizeOptimizationEnabled?e?.view?.scale:void 0,referenceSizeSymbolStyle:e.referenceSizeOptions?.symbolStyle,minSliderValue:null!=f?f:i.min,maxSliderValue:null!=y?y:i.max}:{type:"size",theme:m,minSliderValue:null!=f?f:i.min,maxSliderValue:null!=y?y:i.max}),R=new l({visualVariables:[j]});return{basemapId:b.basemapId,basemapTheme:b.basemapTheme,visualVariables:T,statistics:i,isGrid:s?.isGrid,defaultValuesUsed:E,sizeScheme:_(h),authoringInfo:R}}async function Se(i,a,r,n,l){const t=await s("esri/smartMapping/t9n/smartMapping"),o=l.layer,m=l.field,u=o.geometryType,d=l.defaultSymbolEnabled,p=_(i.sizeScheme),c="polygon"===u,f=c?p.marker:p,y=c?p.background:null,v=c?"point":u,z=a?.opacity,h=i.isGrid,S="reference-size"===l.theme,x=S?[]:i.visualVariables.map((e=>e.clone()));a?.visualVariables?.length&&x.push(...a.visualVariables.map((e=>e.clone())));const E=S?b({view:l.view,field:m,normalizationField:n,sizeStops:w(i.visualVariables[0]),sizeByScaleEnabled:h||!!l.sizeOptimizationEnabled}):null;return{renderer:new e({backgroundFillSymbol:!h&&y?M(u,{type:l.symbolType,color:y.color,outline:C(y,u,z)}):null,classBreakInfos:[{minValue:-ae,maxValue:ae,symbol:E?g({type:l.referenceSizeOptions?.symbolStyle||"circle",color:f.color,primitiveOverrides:E}):M(v,{type:l.symbolType,color:f.color,size:$(f,v),outline:C(f,v,z)})}],defaultLabel:d?t.other:null,defaultSymbol:d&&!S?M(v,{type:l.symbolType,color:f.noDataColor,size:$(f,v,!0),outline:C(f,v,z)}):null,field:m,normalizationField:n,normalizationType:r,valueExpression:l.valueExpression,valueExpressionTitle:l.valueExpressionTitle,visualVariables:x,authoringInfo:i.authoringInfo?.clone()}),visualVariables:i.visualVariables.map((e=>e.clone())),statistics:i.statistics,defaultValuesUsed:i.defaultValuesUsed,isGrid:h,sizeScheme:_(i.sizeScheme),basemapId:i.basemapId,basemapTheme:i.basemapTheme}}function xe(e,i){const a=r(e.minSize),n=(r(e.maxSize)-a)/(i>=4?i-1:i),s=[];for(let r=0;r<i;r++)s.push(a+n*r);return s}async function Ee(i,a){const r=await s("esri/smartMapping/t9n/smartMapping"),n=i.layer,t=i.defaultSymbolEnabled,o=n.geometryType,u="polygon"===o,d=i.symbolType?.includes("3d-volumetric"),p=await ye({basemap:i.basemap,geometryType:o,sizeScheme:i.sizeScheme,worldScale:d,view:i.view}),c=p.scheme,{result:f,outlineResult:y}=a,v=f?.classBreakInfos??[],z=i.classificationMethod,w=i.normalizationType,b=u?c.marker:c,h=u?c.background:null,g=u?"point":o,S=ve(b,g),x=d?G({minSize:S[0],maxSize:S[1]},"height"):null,E=xe({minSize:S[0],maxSize:x?x.maxSize:S[1]},v.length),T=y?.opacity,V=new e({backgroundFillSymbol:h&&M(o,{type:i.symbolType,color:h.color,outline:C(h,o,T)}),classBreakInfos:v.map(((e,a)=>({minValue:e.minValue,maxValue:e.maxValue,symbol:M(g,{type:i.symbolType,color:b.color,size:E[a],widthAndDepth:x?.minSize,outline:C(b,g,T)}),label:e.label}))),defaultLabel:t?r.other:null,defaultSymbol:t?M(g,{type:i.symbolType,color:b.noDataColor,size:$(b,g,!0),widthAndDepth:x?.minSize,outline:C(b,g,T)}):null,field:i.field,valueExpression:i.valueExpression,valueExpressionTitle:i.valueExpressionTitle,normalizationType:w,normalizationField:i.normalizationField,normalizationTotal:"percent-of-total"===w?f?.normalizationTotal:void 0,legendOptions:i.legendOptions,authoringInfo:new l({type:"class-breaks-size",classificationMethod:z,standardDeviationInterval:i.standardDeviationInterval})});return"standard-deviation"!==z&&m({classBreakInfos:V.classBreakInfos,classificationMethod:z,normalizationType:w,round:!0}),y?.visualVariables?.length&&(V.visualVariables=y.visualVariables.map((e=>e.clone()))),{renderer:V,sizeScheme:_(c),classBreaksResult:f,defaultValuesUsed:!!a.defaultValuesUsed,basemapId:p.basemapId,basemapTheme:p.basemapTheme}}async function Te(e){const i=await re(e),{view:a,field:r,valueExpression:n,minValue:s,maxValue:l,layer:t,normalizationField:o,signal:m,statistics:u,filter:d}=i,p=o?"field":void 0,[c,f]=await Promise.all([u??j({layer:t,field:r,valueExpression:n,sqlExpression:i.sqlExpression,sqlWhere:i.sqlWhere,normalizationType:p,normalizationField:o,filter:d,minValue:s,maxValue:l,view:a,signal:m}),i.sizeOptimizationEnabled?z({view:a,layer:t,signal:m,filter:d}).catch(R):null]);return ge(i,c,f,i.referenceSizeResult)}async function Ve(e){const{view:i,filter:a,renderer:r,signal:n,creatorParameters:s}=await de(e),{field:l,normalizationField:o,valueExpression:m,theme:d,layer:p,sizeOptimizationEnabled:c,referenceSizeResult:f,valueExpressionTitle:y}=s,v=o?"field":void 0,[b,h]=await Promise.all([j({layer:p,field:l,valueExpression:m,normalizationField:o,normalizationType:v,filter:a,view:i,signal:n}),c?z({view:i,layer:p,signal:n,filter:a}).catch(R):null]),g=be(h,f,d),{minDataValue:x,maxDataValue:E}=he(b,{theme:d,layer:p,field:l}),T=r.visualVariables?.find(S)??new u({field:l??void 0,valueExpression:m,valueExpressionTitle:y,valueUnit:"unknown",normalizationField:o});g&&(T.minSize=g[0],T.maxSize=g[1]),T.minDataValue=x,T.maxDataValue=E,ze(T,d);const V=r.authoringInfo.clone(),I=V.visualVariables.find((e=>"size"===e.type));return I.minSliderValue=b.min,I.maxSliderValue=b.max,"reference-size"===d&&(I.sizeStops=w(T).map((({label:e,size:i,value:a})=>new t({label:e,size:i,value:a}))),I.referenceSizeScale=f?.isGrid||c?i?.scale:void 0),{visualVariables:[T],isGrid:!!f?.isGrid,authoringInfo:V}}async function Ie(e){const i=await ne(e),a={layer:i.layer,view:i.view,filter:i.filter,signal:i.signal},[r,n]=await Promise.all([Te(me(i)),i.outlineOptimizationEnabled?y(a).catch(R):null]),s=i.normalizationField;return Se(r,n,s?"field":void 0,s,i)}async function Oe(e){const{renderer:i,view:a,signal:r,filter:n,creatorParameters:s,forBinning:l}=await pe(e),{layer:t,outlineOptimizationEnabled:o,normalizationField:m,theme:u,referenceSizeResult:d}=s,[p,c]=await Promise.all([Ve({...e,referenceSizeResult:d}),o?y({layer:t,view:a,filter:n,signal:r}).catch(R):null]),f=p.isGrid,v="reference-size"===u;v||x(i,p.visualVariables,E),x(i,c?.visualVariables,T);const z=p.authoringInfo.clone(),w=z.visualVariables.find((e=>"size"===e.type));return i.authoringInfo=z,f&&(i.backgroundFillSymbol=null),{renderer:v&&w.sizeStops?await ke({layer:t,field:i.field,normalizationField:m,view:a,forBinning:l,sizeStops:w.sizeStops,referenceSizeResult:d}):i,isGrid:f}}async function ke(e){const{layer:r,referenceSizeOptions:n,renderer:s,sizeScheme:o,sizeStops:m,typeScheme:u,view:d,referenceSizeResult:p}=await le(e),c=p?.isGrid,f=s.clone();f.authoringInfo??=new l;const y=f.authoringInfo.visualVariables.find((e=>"reference-size"===e.theme)),v=e.field??y?.field,z=e.normalizationField??y?.normalizationField;if(!v)throw new a("update-renderer-with-reference-size:invalid-parameters","'field' parameter or authoring info with 'field' is required.");const w=b({view:d,field:v,normalizationField:z,sizeStops:m,sizeByScaleEnabled:c||!!e.sizeOptimizationEnabled}),S=n?.symbolStyle||y?.referenceSizeSymbolStyle||"circle";if("class-breaks"===f.type){const e="polygon"===("geometryType"in r?r.geometryType:null)&&o&&"marker"in o?o.marker:null;f.classBreakInfos.forEach((i=>{const a=e?.color??ie(i.symbol,1);"cim"===i.symbol.type?h(i.symbol,{type:S,color:a,primitiveOverrides:w}):a&&(i.symbol=g({type:S,color:a,primitiveOverrides:w}))}))}else if("unique-value"===f.type){const e=f.uniqueValueGroups,a="polygon"===("geometryType"in r?r.geometryType:null)&&u&&"colors"in u?u.colors:null,n=a?i(a,f.uniqueValueInfos?.length??0):null;let s=0;if(e){for(const i of e)for(const e of i.classes??[]){const i=n?n[s]:ie(e.symbol,1);"cim"===e.symbol?.type?h(e.symbol,{type:S,color:i,primitiveOverrides:w}):i&&(e.symbol=g({type:S,color:i,primitiveOverrides:w})),s++}f.uniqueValueGroups=e}}return y&&(y.field=v,y.normalizationField=z,y.sizeStops=m.map((({label:e,size:i,value:a})=>new t({label:e,size:i,value:a}))),y.referenceSizeScale=c||e.sizeOptimizationEnabled?d.scale:void 0,y.referenceSizeSymbolStyle=S),f}async function Be(e){const i=await te(e);return Ee(i,await F(oe(i),i.outlineOptimizationEnabled))}async function je(e){const{renderer:i,creatorParameters:r}=await ce(e),{outlineOptimizationEnabled:n,normalizationType:s,classificationMethod:l}=r,{result:t,outlineResult:o}=await F(oe(r),n),u=t.classBreakInfos;if(r.numClasses!==u.length)throw new a("regenerate-class-breaks-renderer:invalid-parameters","The number of class breaks generated does not match the number of class breaks in the renderer.");return i.classBreakInfos.forEach(((e,i)=>{e.minValue=u[i].minValue,e.maxValue=u[i].maxValue,e.label=u[i].label})),i.normalizationTotal="percent-of-total"===s?t.normalizationTotal:void 0,"standard-deviation"!==l&&m({classBreakInfos:i.classBreakInfos,classificationMethod:l,normalizationType:s,round:!0}),x(i,o?.visualVariables,T),{renderer:i}}async function Re(e){const i=await ue(e),{defaultSymbolEnabled:a,view:r,startTime:n,endTime:s,symbolType:l,minValue:t,maxValue:o,signal:m,filter:u,layer:d}=i,[p,c]=await Promise.all([i.unit?{unit:i.unit,statistics:null,valueExpression:null}:await f({view:r,layer:d,startTime:n,endTime:s,minValue:t,maxValue:o,signal:m,filter:u}),i.outlineOptimizationEnabled?y({layer:d,view:r,filter:u,signal:m}).catch(R):null]),{unit:v,statistics:z}=p,{valueExpression:w,title:b}=await q(i,v),h=await Te(me({layer:d,basemap:i.basemap,valueExpression:w,symbolType:l,statistics:z,legendOptions:{title:b},theme:i.theme,sizeScheme:i.sizeScheme,sizeOptimizationEnabled:i.sizeOptimizationEnabled,view:i.view,minValue:t,maxValue:o,filter:u,signal:m})),g={layer:d,valueExpression:w,defaultSymbolEnabled:a,symbolType:l},S=await Se(h,c,null,null,g),x=S.renderer.authoringInfo?.visualVariables;return x?.forEach((e=>D(e,n,s,v))),{...S,unit:v}}async function Fe(e){const{renderer:i,creatorParameters:a}=await fe(e),{layer:r,outlineOptimizationEnabled:n,sizeOptimizationEnabled:s,startTime:l,endTime:t,theme:o,view:m,signal:u,filter:d}=a,[p,c]=await Promise.all([f({view:m,layer:r,startTime:l,endTime:t,signal:u,filter:d}),n?y({layer:r,view:m,filter:d,signal:u}).catch(R):null]),{unit:v,statistics:z}=p,{valueExpression:w,title:b}=await q(a,v),h=await Te(me({layer:r,valueExpression:w,statistics:z,legendOptions:{title:b},sizeOptimizationEnabled:s,theme:o,view:m,filter:d,signal:u}));x(i,h.visualVariables,E),x(i,c?.visualVariables,T),i.authoringInfo=h.authoringInfo.clone();const g=i.authoringInfo?.visualVariables;return g?.forEach((e=>D(e,l,t,v))),{renderer:i}}export{Re as createAgeRenderer,Be as createClassBreaksRenderer,Ie as createContinuousRenderer,Te as createVisualVariables,Fe as regenerateAgeRenderer,je as regenerateClassBreaksRenderer,Oe as regenerateContinuousRenderer,Ve as regenerateVisualVariables,ke as updateRendererWithReferenceSize};
|
|
5
|
+
import e from"../../renderers/ClassBreaksRenderer.js";import"../../renderers/DictionaryRenderer.js";import"../../renderers/DotDensityRenderer.js";import"../../renderers/HeatmapRenderer.js";import"../../renderers/PieChartRenderer.js";import"../../renderers/Renderer.js";import"../../renderers/SimpleRenderer.js";import"../../renderers/UniqueValueRenderer.js";import"../../renderers/support/jsonUtils.js";import"../../core/Logger.js";import{createUniqueColors as i}from"../../core/colorUtils.js";import r from"../../core/Error.js";import{toPt as a}from"../../core/screenUtils.js";import{ensureClass as n}from"../../core/accessorSupport/ensureType.js";import{fetchMessageBundle as s}from"../../intl/messages.js";import l from"../../renderers/support/AuthoringInfo.js";import t from"../../renderers/support/AuthoringInfoSizeStop.js";import o from"../../renderers/support/AuthoringInfoVisualVariable.js";import{setLabelsForClassBreaks as m}from"../../renderers/support/utils.js";import u from"../../renderers/visualVariables/SizeVariable.js";import{castSizeFromStringOrNumber as d}from"../../renderers/visualVariables/support/castSizeVariable.js";import p from"../../renderers/visualVariables/support/SizeVariableLegendOptions.js";import{TransformationType as c}from"../../renderers/visualVariables/support/sizeVariableUtils.js";import f from"../heuristics/ageUnit.js";import y from"../heuristics/outline.js";import v from"../heuristics/referenceSize.js";import z from"../heuristics/sizeRange.js";import{getReferenceSizeStops as w,createPrimitiveOverrides as b,updateReferenceSizeSymbol as h,createReferenceSizeSymbol as g}from"./support/referenceSizeUtils.js";import{isSizeVV as S,getAuthoringInfoVisualVariable as x,spliceVisualVariables as E,findSizeVVIndex as T,findOutlineVVIndex as V,updateAuthoringInfoVisualVariable as I,processRegenerateParams as O,getRendererToUpdate as j,getStyleType as k,hasScaleDependentSizeVV as B,hasOutlineVV as F}from"./support/regenerateUtils.js";import{getSummaryStatistics as R,errorCallback as q,getClassBreaks as D,getTitleAndExpressionForAgeRenderer as U,updateAgeRendererAuthoringInfoVV as G,verifyBasicFieldValidity as P,getDataRange as M,getSizeRangeForAxis as C,createSymbol as $,getSymbolOutlineFromScheme as A,getSymbolSizeFromScheme as L,getBasemapInfo as W}from"./support/utils.js";import{verifyDates as H,supportedAgeUnits as J}from"../statistics/support/ageUtils.js";import{verifyBinningParams as K}from"../support/binningUtils.js";import{getFieldsList as N,getNormalizationType as Q,isAnyDateField as X}from"../support/utils.js";import{binningCapableLayerTypes as Y,featureCapableLayerTypes as Z,createLayerAdapter as _,getLayerTypeLabels as ee}from"../support/adapters/support/layerUtils.js";import{cloneScheme as ie,getSchemes as re}from"../symbology/size.js";import{getColorFromSymbol as ae}from"../../symbols/support/utils.js";const ne=2**53-1;async function se(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new r("size-visual-variable:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new r("size-visual-variable:missing-parameters","View is required when 'valueExpression' is specified");if("reference-size"===e.theme&&!e.view&&!e.field)throw new r("size-visual-variable:missing-parameters","'view' and 'field' are required when 'theme' is 'reference-size'");if("reference-size"===e.theme&&e.valueExpression)throw new r("size-visual-variable:missing-parameters","'valueExpression' is not supported when 'theme' is 'reference-size'");e.forBinning&&K(e,"size-visual-variable");const i={...e},a=e.forBinning?Y:Z,n=_(i.layer,a,e.forBinning);if(!n)throw new r("size-visual-variable:invalid-parameters","'layer' must be one of these types: "+ee(a).join(", "));"height"===i.axis&&(i.sizeOptimizationEnabled=!1);const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType;if("mesh"===l)throw new r("size-visual-variable:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(i.worldScale){if("polyline"===l||"polygon"===l)throw new r("size-visual-variable:not-supported","'worldScale' sizing is not supported for polyline and polygon layers");if(!i.view||"3d"!==i.view.type)throw new r("size-visual-variable:invalid-parameters","'view' parameter should be an instance of SceneView when 'worldScale' parameter is true")}if("reference-size"===i.theme&&!e.forBinning&&"polygon"!==l)throw new r("size-visual-variable:invalid-parameters","Reference size is only supported for polygon layers");const t=await N({field:i.field,normalizationField:i.normalizationField,valueExpression:i.valueExpression}),o=P(n,t,"size-visual-variable:invalid-parameters");if(o)throw o;return await te(i),{...i,layer:n}}async function le(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new r("size-continuous-renderer:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new r("size-continuous-renderer:missing-parameters","View is required when 'valueExpression' is specified");e.forBinning&&K(e,"size-continuous-renderer");const i={...e};i.symbolType=i.symbolType||"2d",i.defaultSymbolEnabled??=!0;const a=e.forBinning?Y:Z,n=_(i.layer,a,e.forBinning);if(!n)throw new r("size-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+ee(a).join(", "));const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType,t=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="reference-size"!==i.theme&&"polygon"===l&&i.outlineOptimizationEnabled,"mesh"===l)throw new r("size-continuous-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(t&&("polyline"===l||"polygon"===l))throw new r("size-continuous-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new r("size-continuous-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");if("reference-size"===i.theme&&!e.forBinning&&"polygon"!==l)throw new r("size-continuous-renderer:invalid-parameters","Reference size is only supported for polygon layers");const o=await N({field:i.field,normalizationField:i.normalizationField,valueExpression:i.valueExpression}),m=P(n,o,"size-continuous-renderer:invalid-parameters");if(m)throw m;return await te(i),{...i,layer:n}}async function te(e){const i=e.layer;if(("polygon"===i.geometryType||e.forBinning)&&e.view&&e.field&&!e.valueExpression&&(!e.theme||"reference-size"===e.theme)){try{e.referenceSizeResult=e.referenceSizeResult??await v({layer:i,view:e.view,filter:e.filter,forBinning:e.forBinning,signal:e.signal})}catch{}!e.theme&&e.referenceSizeResult?.isGrid&&(e.theme="reference-size"),e.referenceSizeOptions?.symbolStyle||(e.referenceSizeOptions?e.referenceSizeOptions.symbolStyle="circle":e.referenceSizeOptions={symbolStyle:"circle"})}}async function oe(e){if(!e||!(e.layer&&e.view&&e.sizeStops))throw new r("update-renderer-with-reference-size:missing-parameters","'layer', 'view and 'sizeStops' parameters are required");const{view:i,forBinning:a}=e,n=e.forBinning?Y:Z,s=_(e.layer,n,e.forBinning);if(!s)throw new r("update-renderer-with-reference-size:invalid-parameters","'layer' must be one of these types: "+ee(n).join(", "));const l=s.layer;let t=e.renderer;if(!t)if(e.forBinning){if(!("featureReduction"in l&&l.featureReduction&&"renderer"in l.featureReduction&&l.featureReduction.renderer)||"class-breaks"!==l.featureReduction.renderer.type&&"unique-value"!==l.featureReduction.renderer.type)throw new r("update-renderer-with-reference-size:invalid-parameters","Feature reduction renderer is not supported");t=l.featureReduction.renderer}else{if(!("renderer"in l)||!l.renderer||"class-breaks"!==l.renderer.type&&"unique-value"!==l.renderer.type)throw new r("update-renderer-with-reference-size:invalid-parameters","Renderer is not supported");t=l.renderer}const o=t.authoringInfo;if(!o||!o?.visualVariables?.some((e=>"reference-size"===e.theme)))throw new r("update-renderer-with-reference-size:invalid-parameters","'renderer.authoringInfo.visualVariables' should have an authoringInfoVisualVariable with 'theme' set to 'reference-size'");const m=e.isGrid??(await v({view:i,layer:l,forBinning:a}))?.isGrid;return{...e,isGrid:m,renderer:t,layer:s}}async function me(e){if(!e||!e.layer||!e.field&&!e.valueExpression)throw new r("size-class-breaks-renderer:missing-parameters","'layer' and 'field' or 'valueExpression' parameters are required");if(e.valueExpression&&!e.view)throw new r("size-class-breaks-renderer:missing-parameters","View is required when 'valueExpression' is specified");e.forBinning&&K(e,"size-class-breaks-renderer");const i={...e};i.symbolType=i.symbolType||"2d",i.defaultSymbolEnabled??=!0,i.classificationMethod??="equal-interval",i.normalizationType=Q(i);const a=e.forBinning?Y:Z,n=_(i.layer,a,e.forBinning);if(!n)throw new r("size-class-breaks-renderer:invalid-parameters","'layer' must be one of these types: "+ee(a).join(", "));if(!(null!=i.minValue&&null!=i.maxValue)&&(null!=i.minValue||null!=i.maxValue))throw new r("size-class-breaks-renderer:missing-parameters","Both 'minValue' and 'maxValue' are required when specifying custom data range");const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType,t=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="polygon"===l&&i.outlineOptimizationEnabled,"mesh"===l)throw new r("size-class-breaks-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(t&&("polyline"===l||"polygon"===l))throw new r("size-class-breaks-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new r("size-class-breaks-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");const o=await N({field:i.field,normalizationField:i.normalizationField}),m=P(n,o,"size-class-breaks-renderer:invalid-parameters");if(m)throw m;return{...i,layer:n}}function ue(e){const i={...e};delete i.basemap,delete i.sizeScheme,delete i.legendOptions,delete i.symbolType,delete i.defaultSymbolEnabled;const r=i;return r.analyzeData=!(null!=i.minValue&&null!=i.maxValue),r}function de(e){const i={...e},r=!!i.symbolType?.includes("3d-volumetric"),a=i;return a.worldScale=r,r&&(a.axis="3d-volumetric-uniform"===i.symbolType?"all":"height"),delete i.symbolType,delete i.defaultSymbolEnabled,a}async function pe(e){if(!(e&&e.layer&&e.view&&e.startTime&&e.endTime))throw new r("size-age-renderer:missing-parameters","'layer', 'view', 'startTime', 'endTime' parameters are required");const i={...e};i.symbolType??="2d",i.defaultSymbolEnabled??=!0;const a=_(i.layer,Z);if(!a)throw new r("size-age-renderer:invalid-parameters","'layer' must be one of these types: "+ee(Z).join(", "));const n=null!=i.signal?{signal:i.signal}:null;await a.load(n);const s=a.geometryType,l=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="polygon"===s&&i.outlineOptimizationEnabled,"mesh"===s)throw new r("size-age-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(l&&("polyline"===s||"polygon"===s))throw new r("size-age-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new r("size-age-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");const t=H(a,i.startTime,i.endTime,"size-age-renderer:invalid-parameters");if(t)throw t;if(i.unit&&!J.includes(i.unit))throw new r("size-age-renderer:invalid-unit",`Supported units are: ${J.join(", ")}`);return{...i,layer:a}}async function ce(e){const i="regenerate-size-visual-variables";O(e,i);const a=await j(e),n=k(a);if(!n||!["size-continuous","univariate-color-size","color-size","relationship-size","type-size"].includes(n))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const s=x(a,"size");if(!s)throw new r(`${i}:invalid-parameters`,"Renderer does not have a size visual variable authoringInfo");const l=s.theme,t="reference-size"===l,o=a.visualVariables?.find(S);if(!o&&!t)throw new r(`${i}:invalid-parameters`,"Renderer does not have a size visual variable");let m=s.field,u=s.normalizationField,d=null,p=null;m||(o?.field?(m=o.field,u=o.normalizationField):a.field?(m=a.field,u=a.normalizationField):(d=o?.valueExpression??a.valueExpression,p=o?.valueExpressionTitle??a.valueExpressionTitle));const{layer:c,forBinning:f,filter:y,view:v,signal:z}=e,w=B(a),b=await se({layer:c,field:m,valueExpression:d,valueExpressionTitle:p,normalizationField:u,theme:l,sizeOptimizationEnabled:w,forBinning:f,filter:y,view:v,signal:z});return{...e,creatorParameters:b,renderer:a}}async function fe(e){const i="regenerate-size-continuous-renderer";O(e,i);const a=await j(e),n=k(a);if(!n||!["size-continuous","univariate-color-size"].includes(n))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:s,field:l,normalizationField:t,valueExpression:o,valueExpressionTitle:m}=a,u=s?.visualVariables.find((e=>"size"===e.type)),d=u.theme,{layer:p,forBinning:c,filter:f,view:y,signal:v}=e,z=F(a),w=B(a),b=await le({layer:p,field:l,valueExpression:o,valueExpressionTitle:m,normalizationField:t,theme:d,outlineOptimizationEnabled:z,sizeOptimizationEnabled:w,forBinning:c,filter:f,view:y,signal:v});return{...e,creatorParameters:b,renderer:a}}async function ye(e){const i="regenerate-size-class-breaks-renderer";await O(e,i);const a=await j(e);if("size-class-breaks"!==k(a))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:n,field:s,normalizationField:l,normalizationType:t,normalizationTotal:o,valueExpression:m,valueExpressionTitle:u}=a,{classificationMethod:d,standardDeviationInterval:p}=n,c=a.classBreakInfos.length,{layer:f,forBinning:y,filter:v,view:z,signal:w}=e,b=F(a),h=await me({layer:f,field:s,valueExpression:m,valueExpressionTitle:u,normalizationType:t,normalizationField:l,normalizationTotal:o,classificationMethod:d,standardDeviationInterval:p,numClasses:c,outlineOptimizationEnabled:b,forBinning:y,filter:v,view:z,signal:w});return{...e,creatorParameters:h,renderer:a}}async function ve(e){const i="regenerate-size-age-renderer";await O(e,i);const a=await j(e);if("size-age"!==k(a))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:n}=a,s=n?.visualVariables.find((e=>"size"===e.type)),l=s.startTime,t=s.endTime,o=s.units,m=s.theme,{layer:u,filter:d,view:p,signal:c}=e,f=F(a),y=B(a),v=await pe({layer:u,startTime:l,endTime:t,unit:o,theme:m,outlineOptimizationEnabled:f,sizeOptimizationEnabled:y,filter:d,view:p,signal:c});return{...e,creatorParameters:v,renderer:a}}async function ze(e){let i=e.sizeScheme,r=null,a=null;const n=await W(e.basemap,e.view);if(r=null!=n.basemapId?n.basemapId:null,a=null!=n.basemapTheme?n.basemapTheme:null,i)return{scheme:ie(i),basemapId:r,basemapTheme:a};const s=re({basemapTheme:a,geometryType:e.geometryType,worldScale:e.worldScale,view:e.view});return s&&(i=s.primaryScheme,r=s.basemapId,a=s.basemapTheme),{scheme:i,basemapId:r,basemapTheme:a}}function we(e,i){switch(i){case"point":case"multipoint":{const i=e;return[d(i.minSize),d(i.maxSize)]}case"polyline":{const i=e;return[d(i.minWidth),d(i.maxWidth)]}case"polygon":{const i=e;return[d(i.marker.minSize),d(i.marker.maxSize)]}}}function be(e,i){e.transformationType===c.ClampedLinear&&"below"===i&&e.flipSizes()}async function he(e,i,r,a,n){return"reference-size"===r&&i?[1,i.size]:e?[e.minSize,e.maxSize]:we(a,n)}function ge(e,i,r){return"reference-size"===r&&i?[1,i.size]:e?[e.minSize,e.maxSize]:null}function Se(e,i){if("reference-size"===i.theme&&null!=e.min&&null!=e.max&&null!=e.avg&&null!=e.stddev){const i=100,r=0,a=0,n=1,s=e.avg,l=e.min,t=e.max,o=e.stddev,m=0!==s?o/s:0,u=l>a&&l<n&&t<2*n&&m<.5,d=l>r&&l<i&&t<2*i&&m<.5;return{minDataValue:u?a:d?r:l,maxDataValue:u?n:d?i:s+2*o,defaultValuesUsed:!1}}const{theme:r,field:a}=i,n=i.layer,s=a&&!("function"==typeof a)?n.getField(a):null,l=X(s);return M(e,r,l,"above"===r||"below"===r)}async function xe(e,i,a,s){const{theme:m,field:d,normalizationField:c,minValue:f,maxValue:y,axis:v}=e,z=e.layer.geometryType,b=await ze({basemap:e.basemap,geometryType:z,sizeScheme:e.sizeScheme,worldScale:e.worldScale,view:e.view}),h=b.scheme;if(!h)throw new r("size-visual-variable:insufficient-info","Unable to find size scheme");const g=await he(a,s,m,h,z),{minDataValue:S,maxDataValue:x,defaultValuesUsed:E}=Se(i,e),T=[],V="height"===v,I=V?v:void 0,O=g[0];let j=g[1];if(V&&"number"==typeof O&&"number"==typeof j){const e=C({minSize:O,maxSize:j},I);T.push(new u({axis:"width-and-depth",minSize:e.minSize})),j=e.maxSize}const k=new u({field:d??void 0,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,valueUnit:"unknown",normalizationField:c,axis:I,minSize:O,maxSize:j,minDataValue:S,maxDataValue:x,legendOptions:n(p,e.legendOptions)});be(k,m),T.unshift(k);const B=new o("reference-size"===m?{type:"size",field:e.field,normalizationField:e.normalizationField,sizeStops:w(k).map((({label:e,size:i,value:r})=>new t({label:e,size:i,value:r}))),theme:m,referenceSizeScale:s?.isGrid||e.sizeOptimizationEnabled?e?.view?.scale:void 0,referenceSizeSymbolStyle:e.referenceSizeOptions?.symbolStyle,minSliderValue:null!=f?f:i.min,maxSliderValue:null!=y?y:i.max}:{type:"size",theme:m,minSliderValue:null!=f?f:i.min,maxSliderValue:null!=y?y:i.max}),F=new l({visualVariables:[B]});return{basemapId:b.basemapId,basemapTheme:b.basemapTheme,visualVariables:T,statistics:i,isGrid:s?.isGrid,defaultValuesUsed:E,sizeScheme:ie(h),authoringInfo:F}}async function Ee(i,r,a,n,l){const t=await s("esri/smartMapping/t9n/smartMapping"),o=l.layer,m=l.field,u=o.geometryType,d=l.defaultSymbolEnabled,p=ie(i.sizeScheme),c="polygon"===u,f=c?p.marker:p,y=c?p.background:null,v=c?"point":u,z=r?.opacity,h=i.isGrid,S="reference-size"===l.theme,x=S?[]:i.visualVariables.map((e=>e.clone()));r?.visualVariables?.length&&x.push(...r.visualVariables.map((e=>e.clone())));const E=S?b({view:l.view,field:m,normalizationField:n,sizeStops:w(i.visualVariables[0]),sizeByScaleEnabled:h||!!l.sizeOptimizationEnabled}):null;return{renderer:new e({backgroundFillSymbol:!h&&y?$(u,{type:l.symbolType,color:y.color,outline:A(y,u,z)}):null,classBreakInfos:[{minValue:-ne,maxValue:ne,symbol:E?g({type:l.referenceSizeOptions?.symbolStyle||"circle",color:f.color,primitiveOverrides:E}):$(v,{type:l.symbolType,color:f.color,size:L(f,v),outline:A(f,v,z)})}],defaultLabel:d?t.other:null,defaultSymbol:d&&!S?$(v,{type:l.symbolType,color:f.noDataColor,size:L(f,v,!0),outline:A(f,v,z)}):null,field:m,normalizationField:n,normalizationType:a,valueExpression:l.valueExpression,valueExpressionTitle:l.valueExpressionTitle,visualVariables:x,authoringInfo:i.authoringInfo?.clone()}),visualVariables:i.visualVariables.map((e=>e.clone())),statistics:i.statistics,defaultValuesUsed:i.defaultValuesUsed,isGrid:h,sizeScheme:ie(i.sizeScheme),basemapId:i.basemapId,basemapTheme:i.basemapTheme}}function Te(e,i){const r=a(e.minSize),n=(a(e.maxSize)-r)/(i>=4?i-1:i),s=[];for(let a=0;a<i;a++)s.push(r+n*a);return s}async function Ve(i,r){const a=await s("esri/smartMapping/t9n/smartMapping"),n=i.layer,t=i.defaultSymbolEnabled,o=n.geometryType,u="polygon"===o,d=i.symbolType?.includes("3d-volumetric"),p=await ze({basemap:i.basemap,geometryType:o,sizeScheme:i.sizeScheme,worldScale:d,view:i.view}),c=p.scheme,{result:f,outlineResult:y}=r,v=f?.classBreakInfos??[],z=i.classificationMethod,w=i.normalizationType,b=u?c.marker:c,h=u?c.background:null,g=u?"point":o,S=we(b,g),x=d?C({minSize:S[0],maxSize:S[1]},"height"):null,E=Te({minSize:S[0],maxSize:x?x.maxSize:S[1]},v.length),T=y?.opacity,V=new e({backgroundFillSymbol:h&&$(o,{type:i.symbolType,color:h.color,outline:A(h,o,T)}),classBreakInfos:v.map(((e,r)=>({minValue:e.minValue,maxValue:e.maxValue,symbol:$(g,{type:i.symbolType,color:b.color,size:E[r],widthAndDepth:x?.minSize,outline:A(b,g,T)}),label:e.label}))),defaultLabel:t?a.other:null,defaultSymbol:t?$(g,{type:i.symbolType,color:b.noDataColor,size:L(b,g,!0),widthAndDepth:x?.minSize,outline:A(b,g,T)}):null,field:i.field,valueExpression:i.valueExpression,valueExpressionTitle:i.valueExpressionTitle,normalizationType:w,normalizationField:i.normalizationField,normalizationTotal:"percent-of-total"===w?f?.normalizationTotal:void 0,legendOptions:i.legendOptions,authoringInfo:new l({type:"class-breaks-size",classificationMethod:z,standardDeviationInterval:i.standardDeviationInterval})});return"standard-deviation"!==z&&m({classBreakInfos:V.classBreakInfos,classificationMethod:z,normalizationType:w,round:!0}),y?.visualVariables?.length&&(V.visualVariables=y.visualVariables.map((e=>e.clone()))),{renderer:V,sizeScheme:ie(c),classBreaksResult:f,defaultValuesUsed:!!r.defaultValuesUsed,basemapId:p.basemapId,basemapTheme:p.basemapTheme}}async function Ie(e){const i=await se(e),{view:r,field:a,valueExpression:n,minValue:s,maxValue:l,layer:t,normalizationField:o,signal:m,statistics:u,filter:d}=i,p=o?"field":void 0,[c,f]=await Promise.all([u??R({layer:t,field:a,valueExpression:n,sqlExpression:i.sqlExpression,sqlWhere:i.sqlWhere,normalizationType:p,normalizationField:o,filter:d,minValue:s,maxValue:l,view:r,signal:m}),i.sizeOptimizationEnabled?z({view:r,layer:t,signal:m,filter:d}).catch(q):null]);return xe(i,c,f,i.referenceSizeResult)}async function Oe(e){const{view:i,filter:r,renderer:a,signal:n,creatorParameters:s}=await ce(e),{field:l,normalizationField:o,valueExpression:m,theme:d,layer:p,sizeOptimizationEnabled:c,referenceSizeResult:f,valueExpressionTitle:y}=s,v=o?"field":void 0,[b,h]=await Promise.all([R({layer:p,field:l,valueExpression:m,normalizationField:o,normalizationType:v,filter:r,view:i,signal:n}),c?z({view:i,layer:p,signal:n,filter:r}).catch(q):null]),g=ge(h,f,d),{minDataValue:E,maxDataValue:T}=Se(b,{theme:d,layer:p,field:l}),V=a.visualVariables?.find(S),I=(V?.stops?null:V)??new u({field:l??void 0,valueExpression:m,valueExpressionTitle:y,valueUnit:"unknown",normalizationField:o});g&&(I.minSize=g[0],I.maxSize=g[1]),I.minDataValue=E,I.maxDataValue=T,be(I,d);const O=x(a,"size");return O.minSliderValue=b.min,O.maxSliderValue=b.max,"reference-size"===d&&(O.sizeStops=w(I).map((({label:e,size:i,value:r})=>new t({label:e,size:i,value:r}))),O.referenceSizeScale=f?.isGrid||c?i?.scale:void 0),{visualVariables:"reference-size"===d?[]:[I],isGrid:!!f?.isGrid,authoringInfo:a.authoringInfo?.clone(),statistics:b}}async function je(e){const i=await le(e),r={layer:i.layer,view:i.view,filter:i.filter,signal:i.signal},[a,n]=await Promise.all([Ie(de(i)),i.outlineOptimizationEnabled?y(r).catch(q):null]),s=i.normalizationField;return Ee(a,n,s?"field":void 0,s,i)}async function ke(e){const{renderer:i,view:r,signal:a,filter:n,creatorParameters:s,forBinning:l}=await fe(e),{layer:t,outlineOptimizationEnabled:o,theme:m,referenceSizeResult:u}=s,[d,p]=await Promise.all([Oe({...e,referenceSizeResult:u}),o?y({layer:t,view:r,filter:n,signal:a}).catch(q):null]),c=d.isGrid,f="reference-size"===m;E(i,d.visualVariables,T),E(i,p?.visualVariables,V),I(i,d.authoringInfo,"size");const v=d.statistics;if(!f)return{renderer:i,statistics:v};return{renderer:await Be({layer:t,renderer:i,view:r,forBinning:l,sizeStops:x(i,"size","reference-size")?.sizeStops,isGrid:c}),isGrid:c,statistics:v}}async function Be(e){const{layer:a,referenceSizeOptions:n,renderer:s,sizeScheme:o,sizeStops:m,typeScheme:u,view:d,isGrid:p}=await oe(e),c=s.clone();c.authoringInfo??=new l;const f=c.authoringInfo.visualVariables.find((e=>"reference-size"===e.theme)),y=e.field??f?.field,v=e.normalizationField??f?.normalizationField;if(!y)throw new r("update-renderer-with-reference-size:invalid-parameters","'field' parameter or authoring info with 'field' is required.");const z=b({view:d,field:y,normalizationField:v,sizeStops:m,sizeByScaleEnabled:p||!!e.sizeOptimizationEnabled}),w=n?.symbolStyle||f?.referenceSizeSymbolStyle||"circle";if("class-breaks"===c.type){const e="polygon"===("geometryType"in a?a.geometryType:null)&&o&&"marker"in o?o.marker:null;c.classBreakInfos.forEach((i=>{const r=e?.color??ae(i.symbol,1);"cim"===i.symbol.type?h(i.symbol,{type:w,color:r,primitiveOverrides:z}):r&&(i.symbol=g({type:w,color:r,primitiveOverrides:z}))}))}else if("unique-value"===c.type){const e=c.uniqueValueGroups,r="polygon"===("geometryType"in a?a.geometryType:null)&&u&&"colors"in u?u.colors:null,n=r?i(r,c.uniqueValueInfos?.length??0):null;let s=0;if(e){for(const i of e)for(const e of i.classes??[]){const i=n?n[s]:ae(e.symbol,1);"cim"===e.symbol?.type?h(e.symbol,{type:w,color:i,primitiveOverrides:z}):i&&(e.symbol=g({type:w,color:i,primitiveOverrides:z})),s++}c.uniqueValueGroups=e}}return f&&(f.field=y,f.normalizationField=v,f.sizeStops=m.map((({label:e,size:i,value:r})=>new t({label:e,size:i,value:r}))),f.referenceSizeScale=p||e.sizeOptimizationEnabled?d.scale:void 0,f.referenceSizeSymbolStyle=w),c}async function Fe(e){const i=await me(e);return Ve(i,await D(ue(i),i.outlineOptimizationEnabled))}async function Re(e){const{renderer:i,creatorParameters:a}=await ye(e),{outlineOptimizationEnabled:n,normalizationType:s,classificationMethod:l}=a,{result:t,outlineResult:o}=await D(ue(a),n),u=t.classBreakInfos;if(a.numClasses!==u.length)throw new r("regenerate-class-breaks-renderer:invalid-parameters","The number of class breaks generated does not match the number of class breaks in the renderer.");return i.classBreakInfos.forEach(((e,i)=>{e.minValue=u[i].minValue,e.maxValue=u[i].maxValue,e.label=u[i].label})),i.normalizationTotal="percent-of-total"===s?t.normalizationTotal:void 0,"standard-deviation"!==l&&m({classBreakInfos:i.classBreakInfos,classificationMethod:l,normalizationType:s,round:!0}),E(i,o?.visualVariables,V),{renderer:i}}async function qe(e){const i=await pe(e),{defaultSymbolEnabled:r,view:a,startTime:n,endTime:s,symbolType:l,minValue:t,maxValue:o,signal:m,filter:u,layer:d}=i,[p,c]=await Promise.all([i.unit?{unit:i.unit,statistics:null,valueExpression:null}:await f({view:a,layer:d,startTime:n,endTime:s,minValue:t,maxValue:o,signal:m,filter:u}),i.outlineOptimizationEnabled?y({layer:d,view:a,filter:u,signal:m}).catch(q):null]),{unit:v,statistics:z}=p,{valueExpression:w,title:b}=await U(i,v),h=await Ie(de({layer:d,basemap:i.basemap,valueExpression:w,symbolType:l,statistics:z,legendOptions:{title:b},theme:i.theme,sizeScheme:i.sizeScheme,sizeOptimizationEnabled:i.sizeOptimizationEnabled,view:i.view,minValue:t,maxValue:o,filter:u,signal:m})),g={layer:d,valueExpression:w,defaultSymbolEnabled:r,symbolType:l},S=await Ee(h,c,null,null,g),x=S.renderer.authoringInfo?.visualVariables;return x?.forEach((e=>G(e,n,s,v))),{...S,unit:v}}async function De(e){const{renderer:i,creatorParameters:r}=await ve(e),{layer:a,outlineOptimizationEnabled:n,sizeOptimizationEnabled:s,startTime:l,endTime:t,theme:o,view:m,signal:u,filter:d}=r,[p,c]=await Promise.all([f({view:m,layer:a,startTime:l,endTime:t,signal:u,filter:d}),n?y({layer:a,view:m,filter:d,signal:u}).catch(q):null]),{unit:v,statistics:z}=p,{valueExpression:w,title:b}=await U(r,v),h=await Ie(de({layer:a,valueExpression:w,statistics:z,legendOptions:{title:b},sizeOptimizationEnabled:s,theme:o,view:m,filter:d,signal:u}));E(i,h.visualVariables,T),E(i,c?.visualVariables,V),i.authoringInfo=h.authoringInfo.clone();const g=i.authoringInfo?.visualVariables;return g?.forEach((e=>G(e,l,t,v))),{renderer:i}}export{qe as createAgeRenderer,Fe as createClassBreaksRenderer,je as createContinuousRenderer,Ie as createVisualVariables,De as regenerateAgeRenderer,Re as regenerateClassBreaksRenderer,ke as regenerateContinuousRenderer,Oe as regenerateVisualVariables,Be as updateRendererWithReferenceSize};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.31/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../../core/Error.js";async function n(n,r){const{layer:i,view:t,forBinning:
|
|
5
|
+
import e from"../../../core/Error.js";async function n(n,r){const{layer:i,view:t,forBinning:a,filter:s}=n;if(!i||!t)throw new e(`${r}:missing-parameters`,"'layer' and 'view' parameters are required");await i.load();const o="featureReduction"in i?i.featureReduction:null;if(a){if("binning"!==o?.type)throw new e(`${r}:invalid-parameters`,"'layer' must have 'featureReduction' property defined with 'binning' type when 'forBinning' parameter is true");if(s)throw new e(`${r}:invalid-parameters`,"'filter' parameter is not supported when 'forBinning' parameter is true")}return n}async function r(n){const{layer:r,forBinning:i,renderer:t}=n;await r.load();const a="featureReduction"in r?r.featureReduction:null,s=t?.clone()??(i&&"binning"===a?.type?a?.renderer?.clone():"renderer"in r?r.renderer?.clone():null);if(!s)throw new e("get-renderer-to-update:invalid-parameters","renderer not available");return s}function i(e,n,r){const i=e?.authoringInfo?.visualVariables;return i?.find((e=>"reference-size"===r?e.type===n&&"reference-size"===e.theme:e.type===n))}function t(e){if(!e)return null;const n=e.type,r="visualVariables"in e?e.visualVariables:null,t=r?.find(p),a=r?.find(y),s=e.authoringInfo,o=i(e,"color"),u=i(e,"size"),l=i(e,"size","reference-size");if("class-breaks"===n){if("univariate-color-size"===s?.type)return"univariate-color-size";if(t)return a?u?.units?"color-size-age":o?.units?"color-age-size":"color-size":o?.units?"color-age":l?"color-size":"color-continuous";if(a)return u?.units?"size-age":"size-continuous";if(e.classBreakInfos.length>1)return"class-breaks-color"===s?.type?"color-class-breaks":"class-breaks-size"===s?.type?"size-class-breaks":null;if(l)return"size-continuous"}return"unique-value"===n?e.valueExpression?"predominance"===s?.type?"predominance":"relationship"===s?.type?a||l?"relationship-size":"relationship":a||l?"type-size":"type":a?u?.units?"type-size-age":"type-size":l?"type-size":"type":"pie-chart"===n?"pie-chart":"dot-density"===n?"dot-density":null}function a(e){return!!e.visualVariables?.some(z)}function s(e){return!!e.visualVariables?.some(m)}function o(e){return e?.findIndex(z)??-1}function u(e){return e?.findIndex(y)??-1}function l(e){return e?.findIndex(p)??-1}function c(e){return e?.findIndex(d)??-1}function f(e){return e?.findIndex(m)??-1}function p(e){return"color"===e.type}function d(e){return"opacity"===e.type}function y(e){return"size"===e.type&&"outline"!==e.target&&"$view.scale"!==e.valueExpression}function z(e){return"size"===e.type&&"outline"===e.target}function m(e){return"size"===e.type&&"$view.scale"===e.valueExpression&&"outline"!==e.target&&Array.isArray(e.stops)}function v(e,n,r){const i=e.visualVariables,t=r(i);if(!n||Array.isArray(n)&&!n.length)return;Array.isArray(n)||(n=[n]);const a=n.map((e=>e.clone()));i?t>-1?i.splice(t,1,...a):i.push(...a):e.visualVariables=a}function g(e,n,r){const t=n?.visualVariables.find((e=>e.type===r)),a=i(e,r);a&&t&&(a.minSliderValue=t.minSliderValue,a.maxSliderValue=t.maxSliderValue,"size"===r&&"reference-size"===a.theme&&(a.sizeStops=t.sizeStops?.map((e=>e.clone())),a.referenceSizeScale=t.referenceSizeScale))}export{l as findColorVVIndex,c as findOpacityVVIndex,o as findOutlineVVIndex,f as findScaleDependentSizeVVIndex,u as findSizeVVIndex,i as getAuthoringInfoVisualVariable,r as getRendererToUpdate,t as getStyleType,a as hasOutlineVV,s as hasScaleDependentSizeVV,p as isColorVV,d as isOpacityVV,z as isOutlineVV,m as isScaleDependentSizeVV,y as isSizeVV,n as processRegenerateParams,v as spliceVisualVariables,g as updateAuthoringInfoVisualVariable};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.31/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../../core/Error.js";import{getRendererToUpdate as r,getStyleType as t}from"./regenerateUtils.js";async function
|
|
5
|
+
import e from"../../../core/Error.js";import{getRendererToUpdate as r,getStyleType as a,spliceVisualVariables as t,findSizeVVIndex as n,updateAuthoringInfoVisualVariable as i,getAuthoringInfoVisualVariable as s,hasScaleDependentSizeVV as o}from"./regenerateUtils.js";async function c(t){const n=await r(t);switch(a(n)){case"color-continuous":{const{regenerateContinuousRenderer:e}=await import("../color.js");return(await e(t)).renderer}case"color-class-breaks":{const{regenerateClassBreaksRenderer:e}=await import("../color.js");return(await e(t)).renderer}case"color-age":{const{regenerateAgeRenderer:e}=await import("../color.js");return(await e(t)).renderer}case"size-continuous":{const{regenerateContinuousRenderer:e}=await import("../size.js");return(await e(t)).renderer}case"size-class-breaks":{const{regenerateClassBreaksRenderer:e}=await import("../size.js");return(await e(t)).renderer}case"size-age":{const{regenerateAgeRenderer:e}=await import("../size.js");return(await e(t)).renderer}case"color-size":{const{regenerateContinuousRenderer:e}=await import("../color.js"),r=(await e(t)).renderer.clone();return await d(t,r)}case"type":{const{regenerateRenderer:e}=await import("../type.js");return(await e(t)).renderer}case"type-size":{const{regenerateRenderer:e}=await import("../type.js"),r=(await e(t)).renderer.clone();return await d(t,r)}case"predominance":{const{regenerateRenderer:e}=await import("../predominance.js");return(await e(t)).renderer}case"relationship":{const{regenerateRenderer:e}=await import("../relationship.js");return(await e(t)).renderer}case"relationship-size":{const{regenerateRenderer:e}=await import("../relationship.js"),r=(await e(t)).renderer.clone();return await d(t,r)}case"pie-chart":{const{regenerateRenderer:e}=await import("../pieChart.js");return(await e(t)).renderer}case"dot-density":{const{regenerateRenderer:e}=await import("../dotDensity.js");return(await e(t)).renderer}case"univariate-color-size":{const{regenerateRenderer:e}=await import("../univariateColorSize.js");return(await e(t)).renderer}default:throw new e("regenerate-renderer:invalid-parameters","renderer type not supported")}}async function d(e,r){const{regenerateVisualVariables:a,updateRendererWithReferenceSize:c}=await import("../size.js"),{visualVariables:d,authoringInfo:w,isGrid:p}=await a({...e,renderer:r});t(r,d,n),i(r,w,"size");const u=s(r,"size","reference-size");return u?await c({layer:e.layer,renderer:r,sizeStops:u.sizeStops,view:e.view,forBinning:e.forBinning,sizeOptimizationEnabled:o(r),isGrid:p}):r}export{c as regenerateRenderer};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.31/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import"../../renderers/PointCloudClassBreaksRenderer.js";import"../../renderers/PointCloudRenderer.js";import"../../renderers/PointCloudRGBRenderer.js";import"../../renderers/PointCloudStretchRenderer.js";import e from"../../renderers/PointCloudUniqueValueRenderer.js";import"../../renderers/ClassBreaksRenderer.js";import"../../renderers/DictionaryRenderer.js";import"../../renderers/DotDensityRenderer.js";import"../../renderers/HeatmapRenderer.js";import"../../renderers/PieChartRenderer.js";import"../../renderers/Renderer.js";import"../../renderers/SimpleRenderer.js";import r from"../../renderers/UniqueValueRenderer.js";import"../../renderers/support/jsonUtils.js";import"../../core/Logger.js";import{createUniqueColors as i}from"../../core/colorUtils.js";import n from"../../core/Error.js";import{clone as l}from"../../core/lang.js";import{fetchMessageBundle as o}from"../../intl/messages.js";import{isTimeOnlyField as s}from"../../layers/support/fieldUtils.js";import t from"../../renderers/support/RendererLegendOptions.js";import{createUniqueValueLabel as a,calculateDateFormatInterval as u,dateFormatIntervalOptions as p}from"../../renderers/support/utils.js";import d from"../../renderers/support/pointCloud/ColorUniqueValueInfo.js";import m from"../heuristics/outline.js";import c from"../heuristics/sizeRange.js";import{spliceVisualVariables as f,findOutlineVVIndex as y,findScaleDependentSizeVVIndex as v,processRegenerateParams as b,getRendererToUpdate as h,getStyleType as g,hasOutlineVV as w,hasScaleDependentSizeVV as T}from"./support/regenerateUtils.js";import{errorCallback as E,getPointSizeAlgorithm as j,verifyBasicFieldValidity as z,isValidPointSize as x,getSymbolSizeFromScheme as I,getSymbolOutlineFromScheme as V,createSymbol as S,getBasemapInfo as M}from"./support/utils.js";import C from"../statistics/uniqueValues.js";import{verifyBinningParams as q}from"../support/binningUtils.js";import{getFieldsList as O,fieldDelimiter as R,isAnyDateField as U}from"../support/utils.js";import{binningCapableLayerTypes as P,featureCapableLayerTypes as B,createLayerAdapter as D,getLayerTypeLabels as k,LayerType as Z}from"../support/adapters/support/layerUtils.js";import{cloneScheme as F,getSchemes as L}from"../symbology/type.js";async function A(e){if(!e?.layer||!e.field&&!e.valueExpression)throw new n("type-renderer:missing-parameters","'layer' and 'field' or 'valueExpression' parameters are required");if(e.valueExpression&&!e.view)throw new n("type-renderer:missing-parameters","View is required when 'valueExpression' is specified");e.forBinning&&q(e,"type-renderer");const r={...e,layer:e.layer};r.symbolType=r.symbolType||"2d",r.defaultSymbolEnabled??=!0,r.sortBy??="count",r.sortEnabled??=!0,r.statistics=l(r.statistics);const i=null==r.numTypes?10:r.numTypes,o=e.forBinning?P:B,s=D(r.layer,o,e.forBinning);if(!s)throw new n("type-renderer:invalid-parameters","'layer' must be one of these types: "+k(o).join(", "));const t=null!=r.signal?{signal:r.signal}:null;await s.load(t);const a=s.geometryType;if(r.outlineOptimizationEnabled="polygon"===a&&r.outlineOptimizationEnabled,r.sizeOptimizationEnabled=("point"===a||"multipoint"===a||"polyline"===a)&&r.sizeOptimizationEnabled,"mesh"===a)r.symbolType="3d-volumetric",r.colorMixMode=r.colorMixMode||"replace",r.edgesType=r.edgesType||"none";else{if("3d-volumetric-uniform"===r.symbolType&&"point"!==a)throw new n("type-renderer:not-supported","3d-volumetric-uniform symbols are supported for point layers only");if(r.symbolType.includes("3d-volumetric")&&(!r.view||"3d"!==r.view.type))throw new n("type-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or '3d-volumetric-uniform'")}const u=await O({field:r.field,field2:r.field2,field3:r.field3,valueExpression:r.valueExpression}),p=z(s,u,"type-renderer:invalid-parameters");if(p)throw p;return{...r,layer:s,numTypes:i}}async function G(e){const r="regenerate-size-class-breaks-renderer";await b(e,r);const i=await h(e);if("type"!==g(i))throw new n(`${r}:invalid-parameters`,"Renderer is invalid");const{field:l,field2:o,field3:s,valueExpression:t,valueExpressionTitle:a}=i,u=i.uniqueValueInfos.length,{layer:p,forBinning:d,filter:m,view:c,signal:f}=e,y=w(i),v=T(i),E=await A({layer:p,field:l,field2:o,field3:s,valueExpression:t,valueExpressionTitle:a,numTypes:u,outlineOptimizationEnabled:y,sizeOptimizationEnabled:v,forBinning:d,filter:m,view:c,signal:f});return{...e,creatorParameters:E,renderer:i}}async function H(e){if(!e?.layer||!e.field)throw new n("type-point-cloud-class-renderer:missing-parameters","'layer' and 'field' parameters are required");const r={...e,layer:e.layer};r.statistics=l(r.statistics);const i=[Z.PointCloudLayer],o=D(r.layer,i);if(!o)throw new n("type-point-cloud-class-renderer:invalid-parameters","'layer' must be one of these types: "+k(i).join(", "));if(r.layer=o,r.density=r.density||25,r.size=r.size||"100%",!x(r.size))throw new n("type-point-cloud-class-renderer:invalid-parameters","Invalid 'size' parameter. It should be a string of the form '100%'");const s=null!=r.signal?{signal:r.signal}:null;await o.load(s);const t=await O({field:r.field}),a=z(o,t,"type-point-cloud-class-renderer:invalid-parameters");if(a)throw a;return r}async function $(e){let r=e.typeScheme,i=null,n=null;const l=await M(e.basemap,e.view);if(i=null!=l.basemapId?l.basemapId:null,n=null!=l.basemapTheme?l.basemapTheme:null,r)return{scheme:F(r),basemapId:i,basemapTheme:n};const o=L({numColors:e.numColors,basemapTheme:n,geometryType:e.geometryType,theme:e.theme,worldScale:e.worldScale,view:e.view});return o&&(r=o.primaryScheme,i=o.basemapId,n=o.basemapTheme),{scheme:r,basemapId:i,basemapTheme:n}}function J(e,r){let i;return i=e.label<r.label?-1:e.label>r.label?1:0,i}function K(e,r){let i;return i=e.value<r.value?-1:e.value>r.value?1:0,i}function N(e,r){let i=r.count-e.count;return 0===i&&(i=J(e,r)),i}function Q(e,r){let i=r.count-e.count;return 0===i&&(i=K(e,r)),i}function W(e,r,i){let n;"count"===r?(n=Q,i&&"codedValues"in i&&i.codedValues&&(n=N)):"value"===r&&(n=K,i&&"codedValues"in i&&i.codedValues&&(n=J)),n&&e.sort(n)}async function X(e,i,n,l){const s=await o("esri/smartMapping/t9n/smartMapping"),{field:u,field2:p,field3:d}=i,m=e.uniqueValueInfos,c=i.layer,f=u?c.getField(u):null,y=f?c.getFieldDomain(f.name):null,v=-1===i.numTypes?m.length:i.numTypes,b=c.geometryType,h=new r({field:u,field2:p,field3:d,fieldDelimiter:u&&p?R:null}),g=[],w=[],T={value:null,domain:y,fieldInfo:f};m.forEach(((e,r)=>{T.value=e.value,e.label=a(T);const i=e.value;(null===i||"string"==typeof i&&i.toLowerCase().includes("<null>"))&&g.unshift(r)}));for(const r of g)w.unshift(m.splice(r,1)[0]);!1!==i.sortEnabled&&W(m,i.sortBy,y),Y(T,i,m);const E=n?.opacity,j=await $({numColors:m.length,basemap:i.basemap,geometryType:b,typeScheme:i.typeScheme,worldScale:!!i.symbolType?.includes("3d-volumetric"),view:i.view}),z=j.scheme,x=z.colors.map((e=>e.clone())),M=I(z,b),C=V(z,b,E);m.forEach(((e,r)=>{T.value=e.value,e.label=a(T),e.symbol=S(b,{type:i.symbolType,color:x[r],size:M,outline:C,meshInfo:{colorMixMode:i.colorMixMode,edgesType:i.edgesType}})})),i.valueExpression&&(h.valueExpression=i.valueExpression,h.valueExpressionTitle=i.valueExpressionTitle),i.legendOptions&&(h.legendOptions=new t(i.legendOptions));for(let r=0;r<v;r++){const e=m[r];e&&h.addUniqueValueInfo({value:e.value,label:e.label,symbol:S(b,{type:i.symbolType,color:x[r].clone(),size:M,outline:C,meshInfo:{colorMixMode:i.colorMixMode,edgesType:i.edgesType}})})}i.defaultSymbolEnabled&&(h.defaultSymbol=S(b,{type:i.symbolType,color:z.noDataColor,size:M,outline:C,meshInfo:{colorMixMode:i.colorMixMode,edgesType:i.edgesType}}),h.defaultLabel=s.other);for(const r of w)r.symbol=S(b,{type:i.symbolType,color:z.noDataColor,size:M,outline:C,meshInfo:{colorMixMode:i.colorMixMode,edgesType:i.edgesType}}),m.push(r);const q=[],O=h.uniqueValueInfos?.length??0,U=O===m.length?-1:O;if(U>-1)for(let r=U;r<m.length;r++)q.push({...m[r]});return n?.visualVariables?.length&&(h.visualVariables=n.visualVariables.map((e=>e.clone()))),l?.minSize&&(h.visualVariables?h.visualVariables.push(l.minSize):h.visualVariables=[l.minSize]),{renderer:h,uniqueValueInfos:m,excludedUniqueValueInfos:q,typeScheme:F(z),basemapId:j.basemapId,basemapTheme:j.basemapTheme}}function Y(e,r,i){const{field:n,numTypes:l,layer:o,view:t}=r,a=n?o.getField(n):null;if(a&&(U(a)||s(a))){const r=i.filter(((e,r)=>r<l)).map((e=>e.value)),n=s(a)?null:u(r),d=n?p[n]:void 0;if(e.dateFormatOptions={fieldType:a.type,format:d},t){const r=o.layer;e.dateFormatOptions.timeZoneOptions={layerTimeZone:"preferredTimeZone"in r?r.preferredTimeZone:null,viewTimeZone:t.timeZone,datesInUnknownTimezone:"datesInUnknownTimezone"in r&&r.datesInUnknownTimezone}}}}async function _(e,r){const n=e.uniqueValueInfos,l=await $({numColors:n.length,basemap:"gray",theme:"point-cloud-class",geometryType:"point",typeScheme:r}),o=l?.scheme,s="point-cloud-class"===o?.theme,t=s?o.colors:i(o?.colors??[],n.length);return W(n,"value"),n.map(((e,r)=>{const i=e.value;let n=null;return s?(n=t[i],n||(n=t[t.length-1])):n=t[r],new d({values:[i],color:n,label:e.label})}))}async function ee(e){const r=await A(e),{layer:i,view:n,signal:l,filter:o}=r,s={layer:i,field:r.field,field2:r.field2,field3:r.field3,valueExpression:r.valueExpression,returnAllCodedValues:r.returnAllCodedValues,view:n,filter:o,signal:l},[t,a,u]=await Promise.all([null!=r.statistics?r.statistics:C(s),r.outlineOptimizationEnabled?m({layer:i,view:n,signal:l,filter:o}).catch(E):null,r.sizeOptimizationEnabled?c({layer:i,view:n,signal:l,filter:o}).catch(E):null]);return X(t,r,a,u)}async function re(e){const{creatorParameters:r,view:i,signal:n,filter:l,renderer:o}=await G(e),{layer:s,field:t,field2:a,field3:u,valueExpression:p,outlineOptimizationEnabled:d,sizeOptimizationEnabled:b}=r,h={layer:s,field:t,field2:a,field3:u,valueExpression:p,view:i,filter:l,signal:n},[g,w,T]=await Promise.all([C(h),d?m({layer:s,view:i,signal:n,filter:l}).catch(E):null,b?c({layer:s,view:i,signal:n,filter:l}).catch(E):null]),{uniqueValueInfos:j,excludedUniqueValueInfos:z,typeScheme:x}=await X(g,r,w,T);return f(o,w?.visualVariables,y),f(o,T?.minSize,v),{renderer:o,uniqueValueInfos:j,excludedUniqueValueInfos:z,typeScheme:x}}async function ie(r){const i=await H(r),n=null!=i.statistics?i.statistics:await C({layer:i.layer,field:i.field,signal:i.signal});return{renderer:new e({field:i.field,pointsPerInch:i.density??void 0,pointSizeAlgorithm:j(i.size),colorUniqueValueInfos:await _(n,i.typeScheme)})}}export{ie as createPCClassRenderer,ee as createRenderer,re as regenerateRenderer};
|
|
5
|
+
import"../../renderers/PointCloudClassBreaksRenderer.js";import"../../renderers/PointCloudRenderer.js";import"../../renderers/PointCloudRGBRenderer.js";import"../../renderers/PointCloudStretchRenderer.js";import e from"../../renderers/PointCloudUniqueValueRenderer.js";import"../../renderers/ClassBreaksRenderer.js";import"../../renderers/DictionaryRenderer.js";import"../../renderers/DotDensityRenderer.js";import"../../renderers/HeatmapRenderer.js";import"../../renderers/PieChartRenderer.js";import"../../renderers/Renderer.js";import"../../renderers/SimpleRenderer.js";import r from"../../renderers/UniqueValueRenderer.js";import"../../renderers/support/jsonUtils.js";import"../../core/Logger.js";import{createUniqueColors as i}from"../../core/colorUtils.js";import n from"../../core/Error.js";import{clone as l}from"../../core/lang.js";import{fetchMessageBundle as o}from"../../intl/messages.js";import{isTimeOnlyField as s}from"../../layers/support/fieldUtils.js";import t from"../../renderers/support/RendererLegendOptions.js";import{createUniqueValueLabel as a,calculateDateFormatInterval as p,dateFormatIntervalOptions as u}from"../../renderers/support/utils.js";import d from"../../renderers/support/pointCloud/ColorUniqueValueInfo.js";import m from"../heuristics/outline.js";import c from"../heuristics/sizeRange.js";import{spliceVisualVariables as f,findOutlineVVIndex as y,findScaleDependentSizeVVIndex as v,processRegenerateParams as b,getRendererToUpdate as g,getStyleType as h,hasOutlineVV as w,hasScaleDependentSizeVV as T}from"./support/regenerateUtils.js";import{errorCallback as j,getPointSizeAlgorithm as z,verifyBasicFieldValidity as E,isValidPointSize as x,getSymbolSizeFromScheme as I,getSymbolOutlineFromScheme as V,createSymbol as M,getBasemapInfo as S}from"./support/utils.js";import C from"../statistics/uniqueValues.js";import{verifyBinningParams as O}from"../support/binningUtils.js";import{getFieldsList as R,fieldDelimiter as q,isAnyDateField as U}from"../support/utils.js";import{binningCapableLayerTypes as P,featureCapableLayerTypes as B,createLayerAdapter as D,getLayerTypeLabels as Z,LayerType as k}from"../support/adapters/support/layerUtils.js";import{cloneScheme as F,getSchemes as L}from"../symbology/type.js";async function A(e){if(!e?.layer||!e.field&&!e.valueExpression)throw new n("type-renderer:missing-parameters","'layer' and 'field' or 'valueExpression' parameters are required");if(e.valueExpression&&!e.view)throw new n("type-renderer:missing-parameters","View is required when 'valueExpression' is specified");e.forBinning&&O(e,"type-renderer");const r={...e,layer:e.layer};r.symbolType=r.symbolType||"2d",r.defaultSymbolEnabled??=!0,r.sortBy??="count",r.sortEnabled??=!0,r.statistics=l(r.statistics);const i=null==r.numTypes?10:r.numTypes,o=e.forBinning?P:B,s=D(r.layer,o,e.forBinning);if(!s)throw new n("type-renderer:invalid-parameters","'layer' must be one of these types: "+Z(o).join(", "));const t=null!=r.signal?{signal:r.signal}:null;await s.load(t);const a=s.geometryType;if(r.outlineOptimizationEnabled="polygon"===a&&r.outlineOptimizationEnabled,r.sizeOptimizationEnabled=("point"===a||"multipoint"===a||"polyline"===a)&&r.sizeOptimizationEnabled,"mesh"===a)r.symbolType="3d-volumetric",r.colorMixMode=r.colorMixMode||"replace",r.edgesType=r.edgesType||"none";else{if("3d-volumetric-uniform"===r.symbolType&&"point"!==a)throw new n("type-renderer:not-supported","3d-volumetric-uniform symbols are supported for point layers only");if(r.symbolType.includes("3d-volumetric")&&(!r.view||"3d"!==r.view.type))throw new n("type-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or '3d-volumetric-uniform'")}const p=await R({field:r.field,field2:r.field2,field3:r.field3,valueExpression:r.valueExpression}),u=E(s,p,"type-renderer:invalid-parameters");if(u)throw u;return{...r,layer:s,numTypes:i}}async function G(e){const r="regenerate-type-renderer";await b(e,r);const i=await g(e),l=h(i);if(!l||!["type","type-size"].includes(l))throw new n(`${r}:invalid-parameters`,"Renderer is invalid");const{field:o,field2:s,field3:t,valueExpression:a,valueExpressionTitle:p}=i,u=i.uniqueValueInfos.length,{layer:d,forBinning:m,filter:c,view:f,signal:y}=e,v=w(i),j=T(i),z=await A({layer:d,field:o,field2:s,field3:t,valueExpression:a,valueExpressionTitle:p,numTypes:u,outlineOptimizationEnabled:v,sizeOptimizationEnabled:j,forBinning:m,filter:c,view:f,signal:y});return{...e,creatorParameters:z,renderer:i}}async function H(e){if(!e?.layer||!e.field)throw new n("type-point-cloud-class-renderer:missing-parameters","'layer' and 'field' parameters are required");const r={...e,layer:e.layer};r.statistics=l(r.statistics);const i=[k.PointCloudLayer],o=D(r.layer,i);if(!o)throw new n("type-point-cloud-class-renderer:invalid-parameters","'layer' must be one of these types: "+Z(i).join(", "));if(r.layer=o,r.density=r.density||25,r.size=r.size||"100%",!x(r.size))throw new n("type-point-cloud-class-renderer:invalid-parameters","Invalid 'size' parameter. It should be a string of the form '100%'");const s=null!=r.signal?{signal:r.signal}:null;await o.load(s);const t=await R({field:r.field}),a=E(o,t,"type-point-cloud-class-renderer:invalid-parameters");if(a)throw a;return r}async function $(e){let r=e.typeScheme,i=null,n=null;const l=await S(e.basemap,e.view);if(i=null!=l.basemapId?l.basemapId:null,n=null!=l.basemapTheme?l.basemapTheme:null,r)return{scheme:F(r),basemapId:i,basemapTheme:n};const o=L({numColors:e.numColors,basemapTheme:n,geometryType:e.geometryType,theme:e.theme,worldScale:e.worldScale,view:e.view});return o&&(r=o.primaryScheme,i=o.basemapId,n=o.basemapTheme),{scheme:r,basemapId:i,basemapTheme:n}}function J(e,r){let i;return i=e.label<r.label?-1:e.label>r.label?1:0,i}function K(e,r){let i;return i=e.value<r.value?-1:e.value>r.value?1:0,i}function N(e,r){let i=r.count-e.count;return 0===i&&(i=J(e,r)),i}function Q(e,r){let i=r.count-e.count;return 0===i&&(i=K(e,r)),i}function W(e,r,i){let n;"count"===r?(n=Q,i&&"codedValues"in i&&i.codedValues&&(n=N)):"value"===r&&(n=K,i&&"codedValues"in i&&i.codedValues&&(n=J)),n&&e.sort(n)}async function X(e,i,n,l){const s=await o("esri/smartMapping/t9n/smartMapping"),{field:p,field2:u,field3:d}=i,m=e.uniqueValueInfos,c=i.layer,f=p?c.getField(p):null,y=f?c.getFieldDomain(f.name):null,v=-1===i.numTypes?m.length:i.numTypes,b=c.geometryType,g=new r({field:p,field2:u,field3:d,fieldDelimiter:p&&u?q:null}),h=[],w=[],T={value:null,domain:y,fieldInfo:f};m.forEach(((e,r)=>{T.value=e.value,e.label=a(T);const i=e.value;(null===i||"string"==typeof i&&i.toLowerCase().includes("<null>"))&&h.unshift(r)}));for(const r of h)w.unshift(m.splice(r,1)[0]);!1!==i.sortEnabled&&W(m,i.sortBy,y),Y(T,i,m);const j=n?.opacity,z=await $({numColors:m.length,basemap:i.basemap,geometryType:b,typeScheme:i.typeScheme,worldScale:!!i.symbolType?.includes("3d-volumetric"),view:i.view}),E=z.scheme,x=E.colors.map((e=>e.clone())),S=I(E,b),C=V(E,b,j);m.forEach(((e,r)=>{T.value=e.value,e.label=a(T),e.symbol=M(b,{type:i.symbolType,color:x[r],size:S,outline:C,meshInfo:{colorMixMode:i.colorMixMode,edgesType:i.edgesType}})})),i.valueExpression&&(g.valueExpression=i.valueExpression,g.valueExpressionTitle=i.valueExpressionTitle),i.legendOptions&&(g.legendOptions=new t(i.legendOptions));for(let r=0;r<v;r++){const e=m[r];e&&g.addUniqueValueInfo({value:e.value,label:e.label,symbol:M(b,{type:i.symbolType,color:x[r].clone(),size:S,outline:C,meshInfo:{colorMixMode:i.colorMixMode,edgesType:i.edgesType}})})}i.defaultSymbolEnabled&&(g.defaultSymbol=M(b,{type:i.symbolType,color:E.noDataColor,size:S,outline:C,meshInfo:{colorMixMode:i.colorMixMode,edgesType:i.edgesType}}),g.defaultLabel=s.other);for(const r of w)r.symbol=M(b,{type:i.symbolType,color:E.noDataColor,size:S,outline:C,meshInfo:{colorMixMode:i.colorMixMode,edgesType:i.edgesType}}),m.push(r);const O=[],R=g.uniqueValueInfos?.length??0,U=R===m.length?-1:R;if(U>-1)for(let r=U;r<m.length;r++)O.push({...m[r]});return n?.visualVariables?.length&&(g.visualVariables=n.visualVariables.map((e=>e.clone()))),l?.minSize&&(g.visualVariables?g.visualVariables.push(l.minSize):g.visualVariables=[l.minSize]),{renderer:g,uniqueValueInfos:m,excludedUniqueValueInfos:O,typeScheme:F(E),basemapId:z.basemapId,basemapTheme:z.basemapTheme}}function Y(e,r,i){const{field:n,numTypes:l,layer:o,view:t}=r,a=n?o.getField(n):null;if(a&&(U(a)||s(a))){const r=i.filter(((e,r)=>r<l)).map((e=>e.value)),n=s(a)?null:p(r),d=n?u[n]:void 0;if(e.dateFormatOptions={fieldType:a.type,format:d},t){const r=o.layer;e.dateFormatOptions.timeZoneOptions={layerTimeZone:"preferredTimeZone"in r?r.preferredTimeZone:null,viewTimeZone:t.timeZone,datesInUnknownTimezone:"datesInUnknownTimezone"in r&&r.datesInUnknownTimezone}}}}async function _(e,r){const n=e.uniqueValueInfos,l=await $({numColors:n.length,basemap:"gray",theme:"point-cloud-class",geometryType:"point",typeScheme:r}),o=l?.scheme,s="point-cloud-class"===o?.theme,t=s?o.colors:i(o?.colors??[],n.length);return W(n,"value"),n.map(((e,r)=>{const i=e.value;let n=null;return s?(n=t[i],n||(n=t[t.length-1])):n=t[r],new d({values:[i],color:n,label:e.label})}))}async function ee(e){const r=await A(e),{layer:i,view:n,signal:l,filter:o}=r,s={layer:i,field:r.field,field2:r.field2,field3:r.field3,valueExpression:r.valueExpression,returnAllCodedValues:r.returnAllCodedValues,view:n,filter:o,signal:l},[t,a,p]=await Promise.all([null!=r.statistics?r.statistics:C(s),r.outlineOptimizationEnabled?m({layer:i,view:n,signal:l,filter:o}).catch(j):null,r.sizeOptimizationEnabled?c({layer:i,view:n,signal:l,filter:o}).catch(j):null]);return X(t,r,a,p)}async function re(e){const{creatorParameters:r,view:i,signal:n,filter:l,renderer:o}=await G(e),{layer:s,outlineOptimizationEnabled:t,sizeOptimizationEnabled:a}=r,[p,u]=await Promise.all([t?m({layer:s,view:i,signal:n,filter:l}).catch(j):null,a?c({layer:s,view:i,signal:n,filter:l}).catch(j):null]);return f(o,p?.visualVariables,y),f(o,u?.minSize,v),{renderer:o}}async function ie(r){const i=await H(r),n=null!=i.statistics?i.statistics:await C({layer:i.layer,field:i.field,signal:i.signal});return{renderer:new e({field:i.field,pointsPerInch:i.density??void 0,pointSizeAlgorithm:z(i.size),colorUniqueValueInfos:await _(n,i.typeScheme)})}}export{ie as createPCClassRenderer,ee as createRenderer,re as regenerateRenderer};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.31/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../core/Error.js";import i from"../../renderers/support/AuthoringInfo.js";import s from"../../renderers/support/ClassBreakInfo.js";import a from"../../renderers/visualVariables/support/SizeStop.js";import{getSize as o}from"../../renderers/visualVariables/support/visualVariableUtils.js";import{createVisualVariable as l}from"./color.js";import{createVisualVariables as n,createContinuousRenderer as t}from"./size.js";import{verifyBasicFieldValidity as r,createStopValuesForAboveBelow as u,clampAboveAndBelowStopValues as m,createDefaultStopValues as p}from"./support/utils.js";import{verifyBinningParams as c}from"../support/binningUtils.js";import{isAnyDateField as d,getFieldsList as v}from"../support/utils.js";import{binningCapableLayerTypes as f,featureCapableLayerTypes as b,createLayerAdapter as y,getLayerTypeLabels as h}from"../support/adapters/support/layerUtils.js";import{getAboveAndBelowSymbols as w}from"../symbology/support/aboveAndBelowUtils.js";import{applyCIMSymbolColor as z}from"../../symbols/support/cimSymbolUtils.js";import{Symbol3DMaterial as g}from"../../symbols/support/Symbol3DMaterial.js";const V=2**53-1;async function O(i){if(!i?.layer||!(i.field||i.valueExpression||i.sqlExpression))throw new e("univariate-colorsize-visual-variables:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(i.valueExpression&&!i.sqlExpression&&!i.view)throw new e("univariate-colorsize-visual-variables:missing-parameters","View is required when 'valueExpression' is specified");if("above-and-below"===i.theme&&i.sizeOptions?.sizeOptimizationEnabled)throw new e("univariate-colorsize-visual-variables:invalid-parameters","sizeOptimizationEnabled cannot be true for 'above-and-below' theme");i.forBinning&&c(i,"univariate-colorsize-visual-variables");const s={...i,layer:i.layer},a=i.forBinning?f:b,o=y(s.layer,a,i.forBinning);if(!o)throw new e("univariate-colorsize-visual-variables:invalid-parameters","'layer' must be one of these types: "+h(a).join(", "));s.layer=o,s.theme=s.theme||s.colorOptions?.theme?s.theme:"high-to-low";const l=null!=s.signal?{signal:s.signal}:null;await o.load(l);const n=await v({field:s.field,normalizationField:s.normalizationField,valueExpression:s.valueExpression}),t=r(o,n,"univariate-colorsize-visual-variables:invalid-parameters");if(t)throw t;return s}function x(e,i){const s={...e},{sizeOptions:a,theme:o}=s,l=s.legendOptions||s.sizeOptions?.legendOptions;return delete s.sizeOptions,delete s.colorOptions,{...s,...a,statistics:i||s.statistics,theme:"above-and-below"===o?null:o,legendOptions:l}}function S(e,i){const s={...e},a=s.colorOptions,o=s.theme||a?.theme,l=s.legendOptions||s.colorOptions?.legendOptions;return delete s.sizeOptions,delete s.colorOptions,{...s,...a,statistics:i||s.statistics,theme:o,legendOptions:l}}async function E(i){if(!i?.layer||!(i.field||i.valueExpression||i.sqlExpression))throw new e("univariate-colorsize-continuous-renderer:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(i.valueExpression&&!i.sqlExpression&&!i.view)throw new e("univariate-colorsize-continuous-renderer:missing-parameters","View is required when 'valueExpression' is specified");i.forBinning&&c(i,"univariate-colorsize-continuous-renderer");const s={...i,layer:i.layer};s.symbolType=s.symbolType||"2d",s.colorOptions||(s.colorOptions={}),s.colorOptions.isContinuous=s.colorOptions.isContinuous??!1;const a=i.forBinning?f:b,o=y(s.layer,a,i.forBinning);if(!o)throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+h(a).join(", "));s.layer=o;const l=null!=s.signal?{signal:s.signal}:null;if(await o.load(l),"above-and-below"===s.theme&&s.symbolOptions){if(s.symbolType.includes("3d-volumetric"))throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'symbolOptions' is applicable for '2d' and '3d-flat' 'symbolType' only");if("point"!==o.geometryType&&"polygon"!==o.geometryType)throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'symbolOptions' only apply to layers with 'point' or 'polygon' geometryType")}const n=await v({field:s.field,normalizationField:s.normalizationField,valueExpression:s.valueExpression}),t=r(o,n,"univariate-colorsize-continuous-renderer:invalid-parameters");if(t)throw t;return s}function j(e){const i={...e},s={...i.sizeOptions};return delete i.sizeOptions,delete i.colorOptions,delete s.sizeOptimizationEnabled,{...i,...s}}function I(e,i){if("type"in e&&"cim"===e.type)z(e,i);else if("type"in e&&e.type.includes("3d")){e.symbolLayers.forEach((e=>{"material"in e&&null!=e.material&&"color"in e.material&&(e.material?e.material.color=i:e.material=new g({color:i}))}))}else"color"in e&&(e.color=i)}function T(e,i,s){if((i?.symbolStyle||i?.symbols)&&("point"===s||"polygon"===s))return i.symbols||w(i.symbolStyle);const a=e.classBreakInfos[0].symbol;return{above:a.clone(),below:a.clone()}}function q(e,i,a){const o=a.symbolOptions,l=a.layer,n=o?.symbols?"custom":o?.symbolStyle,t=a.colorOptions?.isContinuous;if(B(e,i,t),n||!t){const a=i.size.visualVariables[0].stops,{above:r,below:u}=T(e,o,l.geometryType);if(!t){const e=i.color.colorScheme.colors,s=e[0];I(r,e[e.length-1]),I(u,s)}e.classBreakInfos=[new s({minValue:-V,maxValue:a[2].value,symbol:u}),new s({minValue:a[2].value,maxValue:V,symbol:r})],n&&e.authoringInfo&&(e.authoringInfo.univariateSymbolStyle=n)}}function B(e,i,s=!0){const a=i?.authoringInfo?.clone(),o=a?.visualVariables?.some((e=>"reference-size"===e.theme)),l=o?[]:i.size.visualVariables.map((e=>e.clone()));s?l.push(i.color.visualVariable.clone()):a.visualVariables=a.visualVariables?.filter((e=>"size"===e.type)),e.visualVariables&&l.push(...e.visualVariables.filter((e=>"target"in e&&"outline"===e.target)).map((e=>e.clone()))),e.authoringInfo=a,e.visualVariables=l}function D(e){const i={...e},s=i.symbolType,a=!!s?.includes("3d-volumetric");delete i.symbolType,delete i.defaultSymbolEnabled;const o=i;return o.worldScale=a,a&&(o.sizeOptions={...o.sizeOptions},o.sizeOptions.axis="3d-volumetric-uniform"===s?"all":"height"),o}async function U(e,i,s,l){const n=i[0],t=i[1],r=Math.round((t-n)/2)+n,u=e.clone();u.stops=[new a({value:s[0],size:t}),new a({value:s[1],size:r}),new a({value:s[2],size:n}),new a({value:s[3],size:r}),new a({value:s[4],size:t})],e.stops=[new a({value:l[0],size:o(u,l[0])}),new a({value:l[1],size:o(u,l[1])}),new a({value:l[2],size:o(u,l[2])}),new a({value:l[3],size:o(u,l[3])}),new a({value:l[4],size:o(u,l[4])})]}async function C(e,i,s,a,o){const l=e.find((e=>"width-and-depth"!==e.axis&&!e.target)),n="number"==typeof l?.minSize?l?.minSize:null,t="number"==typeof l?.maxSize?l?.maxSize:null;if(null!=l?.minDataValue&&null!=n&&null!=t)if(a)if("above-and-below"===a){l.minDataValue=null,l.maxDataValue=null,l.minSize=null,l.maxSize=null;const e=u(s,o),a=m(e,s);await U(l,[n,t],e,a),i.stops.forEach(((e,i)=>e.value=a[i]))}else{const{minDataValue:e,maxDataValue:s}=l,a=p(e,s,5);i.stops.forEach(((e,i)=>e.value=a[i])),l.minDataValue=a[0],l.maxDataValue=a[a.length-1]}else l.minDataValue=i.stops[0].value,l.maxDataValue=i.stops[i.stops.length-1].value}function F(e,s,a){const{theme:o,minValue:l,maxValue:n}=e,t=s.authoringInfo.visualVariables[0].clone(),r=a.authoringInfo.visualVariables[0].clone(),{stops:u}=s.visualVariable;return"above-and-below"===o?(t.minSliderValue=r.minSliderValue=l??u[0].value,t.maxSliderValue=r.maxSliderValue=n??u.at(-1)?.value,r.theme="above-and-below"):o&&"high-to-low"!==o||"reference-size"!==r.theme||2!==r.sizeStops?.length||(r.sizeStops[0].value=u[0].value,r.sizeStops[1].value=u.at(-1)?.value),new i({type:"univariate-color-size",univariateTheme:o,visualVariables:[t,r]})}async function k(e){const i=await O(e),s=await l(S(i)),{visualVariable:a,statistics:o}=s,t=await n(x(i,o)),r=t.visualVariables,u=e.layer,m=e.field?u.getField(e.field):null;return await C(r,a,o,i.theme,d(m)),{basemapId:t.basemapId,basemapTheme:t.basemapTheme,statistics:o,defaultValuesUsed:s.defaultValuesUsed,color:{visualVariable:a,colorScheme:s.colorScheme},size:{visualVariables:r,sizeScheme:t.sizeScheme},authoringInfo:F(i,s,t)}}async function A(e){return M(e)}async function M(e){const i=await E(e),{renderer:s,statistics:a,defaultValuesUsed:o}=await t(j(i)),l=D(i);l.statistics=a;const n=await k(l);return"above-and-below"===i.theme?q(s,n,i):B(s,n),{renderer:s,statistics:a,defaultValuesUsed:o,color:i.colorOptions?.isContinuous||"above-and-below"!==i.theme?n.color:null,size:n.size,basemapId:n.basemapId,basemapTheme:n.basemapTheme}}export{A as createContinuousRenderer,M as createRenderer,k as createVisualVariables};
|
|
5
|
+
import e from"../../core/Error.js";import i from"../../renderers/support/AuthoringInfo.js";import a from"../../renderers/support/ClassBreakInfo.js";import s from"../../renderers/visualVariables/support/SizeStop.js";import{getSize as o}from"../../renderers/visualVariables/support/visualVariableUtils.js";import{createVisualVariable as n}from"./color.js";import{createVisualVariables as l,createContinuousRenderer as t,regenerateContinuousRenderer as r}from"./size.js";import{isColorVV as u,updateAuthoringInfoVisualVariable as p,spliceVisualVariables as m,findSizeVVIndex as c,getAuthoringInfoVisualVariable as v,processRegenerateParams as d,getRendererToUpdate as f,getStyleType as b,hasOutlineVV as y,hasScaleDependentSizeVV as w}from"./support/regenerateUtils.js";import{verifyBasicFieldValidity as h,createStopValuesForAboveBelow as z,clampAboveAndBelowStopValues as g,createDefaultStopValues as V}from"./support/utils.js";import{verifyBinningParams as O}from"../support/binningUtils.js";import{isAnyDateField as x,getFieldsList as E}from"../support/utils.js";import{binningCapableLayerTypes as S,featureCapableLayerTypes as I,createLayerAdapter as T,getLayerTypeLabels as j}from"../support/adapters/support/layerUtils.js";import{getAboveAndBelowSymbols as B}from"../symbology/support/aboveAndBelowUtils.js";import{applyCIMSymbolColor as q}from"../../symbols/support/cimSymbolUtils.js";import{Symbol3DMaterial as D}from"../../symbols/support/Symbol3DMaterial.js";const U=2**53-1;async function C(i){if(!i?.layer||!(i.field||i.valueExpression||i.sqlExpression))throw new e("univariate-colorsize-visual-variables:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(i.valueExpression&&!i.sqlExpression&&!i.view)throw new e("univariate-colorsize-visual-variables:missing-parameters","View is required when 'valueExpression' is specified");if("above-and-below"===i.theme&&i.sizeOptions?.sizeOptimizationEnabled)throw new e("univariate-colorsize-visual-variables:invalid-parameters","sizeOptimizationEnabled cannot be true for 'above-and-below' theme");i.forBinning&&O(i,"univariate-colorsize-visual-variables");const a={...i,layer:i.layer},s=i.forBinning?S:I,o=T(a.layer,s,i.forBinning);if(!o)throw new e("univariate-colorsize-visual-variables:invalid-parameters","'layer' must be one of these types: "+j(s).join(", "));a.layer=o,a.theme=a.theme||a.colorOptions?.theme?a.theme:"high-to-low";const n=null!=a.signal?{signal:a.signal}:null;await o.load(n);const l=await E({field:a.field,normalizationField:a.normalizationField,valueExpression:a.valueExpression}),t=h(o,l,"univariate-colorsize-visual-variables:invalid-parameters");if(t)throw t;return a}function F(e,i){const a={...e},{sizeOptions:s,theme:o}=a,n=a.legendOptions||a.sizeOptions?.legendOptions;return delete a.sizeOptions,delete a.colorOptions,{...a,...s,statistics:i||a.statistics,theme:"above-and-below"===o?null:o,legendOptions:n}}function k(e,i){const a={...e},s=a.colorOptions,o=a.theme||s?.theme,n=a.legendOptions||a.colorOptions?.legendOptions;return delete a.sizeOptions,delete a.colorOptions,{...a,...s,statistics:i||a.statistics,theme:o,legendOptions:n}}async function A(i){if(!i?.layer||!(i.field||i.valueExpression||i.sqlExpression))throw new e("univariate-colorsize-continuous-renderer:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(i.valueExpression&&!i.sqlExpression&&!i.view)throw new e("univariate-colorsize-continuous-renderer:missing-parameters","View is required when 'valueExpression' is specified");i.forBinning&&O(i,"univariate-colorsize-continuous-renderer");const a={...i,layer:i.layer};a.symbolType=a.symbolType||"2d",a.colorOptions||(a.colorOptions={}),a.colorOptions.isContinuous=a.colorOptions.isContinuous??!1;const s=i.forBinning?S:I,o=T(a.layer,s,i.forBinning);if(!o)throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+j(s).join(", "));const n=null!=a.signal?{signal:a.signal}:null;if(await o.load(n),"above-and-below"===a.theme&&a.symbolOptions){if(a.symbolType.includes("3d-volumetric"))throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'symbolOptions' is applicable for '2d' and '3d-flat' 'symbolType' only");if("point"!==o.geometryType&&"polygon"!==o.geometryType)throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'symbolOptions' only apply to layers with 'point' or 'polygon' geometryType")}const l=await E({field:a.field,normalizationField:a.normalizationField,valueExpression:a.valueExpression}),t=h(o,l,"univariate-colorsize-continuous-renderer:invalid-parameters");if(t)throw t;return{...a,layer:o}}function M(e){const i={...e},a={...i.sizeOptions};return delete i.sizeOptions,delete i.colorOptions,delete a.sizeOptimizationEnabled,{...i,...a}}async function P(i){const a="regenerate-univariate-color-size-renderer";await d(i,a);const s=await f(i);if("univariate-color-size"!==b(s))throw new e(`${a}:invalid-parameters`,"Renderer is invalid");const{layer:o,forBinning:n,filter:l,view:t,signal:r}=i,{field:u,normalizationField:p,valueExpression:m,valueExpressionTitle:c}=s,v=y(s),h=w(s),z=s.authoringInfo?.univariateTheme,g=await A({layer:o,field:u,normalizationField:p,valueExpression:m,valueExpressionTitle:c,outlineOptimizationEnabled:v,theme:z,colorOptions:{isContinuous:"above-and-below"===z?s.visualVariables?.some((e=>"color"===e.type)):void 0},sizeOptions:{sizeOptimizationEnabled:h},forBinning:n,filter:l,view:t,signal:r});return{...i,creatorParameters:g,renderer:s}}function R(e,i){if("type"in e&&"cim"===e.type)q(e,i);else if("type"in e&&e.type.includes("3d")){e.symbolLayers.forEach((e=>{"material"in e&&null!=e.material&&"color"in e.material&&(e.material?e.material.color=i:e.material=new D({color:i}))}))}else"color"in e&&(e.color=i)}function L(e,i,a){if((i?.symbolStyle||i?.symbols)&&("point"===a||"polygon"===a))return i.symbols||B(i.symbolStyle);const s=e.classBreakInfos[0].symbol;return{above:s.clone(),below:s.clone()}}function $(e,i,s){const o=s.symbolOptions,n=s.layer,l=o?.symbols?"custom":o?.symbolStyle,t=s.colorOptions?.isContinuous;if(G(e,i,t),l||!t){const s=i.size.visualVariables[0].stops,{above:r,below:u}=L(e,o,n.geometryType);if(!t){const e=i.color.colorScheme.colors,a=e[0];R(r,e[e.length-1]),R(u,a)}e.classBreakInfos=[new a({minValue:-U,maxValue:s[2].value,symbol:u}),new a({minValue:s[2].value,maxValue:U,symbol:r})],l&&e.authoringInfo&&(e.authoringInfo.univariateSymbolStyle=l)}}function G(e,i,a=!0){const s=i?.authoringInfo?.clone(),o=s?.visualVariables?.some((e=>"reference-size"===e.theme)),n=o?[]:i.size.visualVariables.map((e=>e.clone()));a?n.push(i.color.visualVariable.clone()):s.visualVariables=s.visualVariables?.filter((e=>"size"===e.type)),e.visualVariables&&n.push(...e.visualVariables.filter((e=>"target"in e&&"outline"===e.target)).map((e=>e.clone()))),e.authoringInfo=s,e.visualVariables=n}function H(e){const i={...e},a=i.symbolType,s=!!a?.includes("3d-volumetric");delete i.symbolType,delete i.defaultSymbolEnabled;const o=i;return o.worldScale=s,s&&(o.sizeOptions={...o.sizeOptions},o.sizeOptions.axis="3d-volumetric-uniform"===a?"all":"height"),o}async function J(e,i,a,n){const l=i[0],t=i[1],r=Math.round((t-l)/2)+l,u=e.clone();u.stops=[new s({value:a[0],size:t}),new s({value:a[1],size:r}),new s({value:a[2],size:l}),new s({value:a[3],size:r}),new s({value:a[4],size:t})],e.stops=[new s({value:n[0],size:o(u,n[0])}),new s({value:n[1],size:o(u,n[1])}),new s({value:n[2],size:o(u,n[2])}),new s({value:n[3],size:o(u,n[3])}),new s({value:n[4],size:o(u,n[4])})]}async function K(e,i,a,s,o){const n=e.find((e=>"width-and-depth"!==e.axis&&!e.target)),l="number"==typeof n?.minSize?n?.minSize:null,t="number"==typeof n?.maxSize?n?.maxSize:null;if(null!=n?.minDataValue&&null!=l&&null!=t)if(s)if("above-and-below"===s){n.minDataValue=null,n.maxDataValue=null,n.minSize=null,n.maxSize=null;const e=z(a,o),s=g(e,a);await J(n,[l,t],e,s),i.stops.forEach(((e,i)=>e.value=s[i]))}else{const{minDataValue:e,maxDataValue:a}=n,s=V(e,a,5);i.stops.forEach(((e,i)=>e.value=s[i])),n.minDataValue=s[0],n.maxDataValue=s[s.length-1]}else n.minDataValue=i.stops[0].value,n.maxDataValue=i.stops[i.stops.length-1].value}function N(e,a,s){const{theme:o,minValue:n,maxValue:l}=e,t=a.authoringInfo.visualVariables[0].clone(),r=s.authoringInfo.visualVariables[0].clone(),{stops:u}=a.visualVariable;return"above-and-below"===o?(t.minSliderValue=r.minSliderValue=n??u[0].value,t.maxSliderValue=r.maxSliderValue=l??u.at(-1)?.value,r.theme="above-and-below"):o&&"high-to-low"!==o||"reference-size"!==r.theme||2!==r.sizeStops?.length||(r.sizeStops[0].value=u[0].value,r.sizeStops[1].value=u.at(-1)?.value),new i({type:"univariate-color-size",univariateTheme:o,visualVariables:[t,r]})}async function Q(e){const i=await C(e),a=await n(k(i)),{visualVariable:s,statistics:o}=a,t=await l(F(i,o)),r=t.visualVariables,u=e.layer,p=e.field?u.getField(e.field):null;return await K(r,s,o,i.theme,x(p)),{basemapId:t.basemapId,basemapTheme:t.basemapTheme,statistics:o,defaultValuesUsed:a.defaultValuesUsed,color:{visualVariable:s,colorScheme:a.colorScheme},size:{visualVariables:r,sizeScheme:t.sizeScheme},authoringInfo:N(i,a,t)}}async function W(e){return X(e)}async function X(e){const i=await A(e),{renderer:a,statistics:s,defaultValuesUsed:o}=await t(M(i)),n=H(i);n.statistics=s;const l=await Q(n);return"above-and-below"===i.theme?$(a,l,i):G(a,l),{renderer:a,statistics:s,defaultValuesUsed:o,color:i.colorOptions?.isContinuous||"above-and-below"!==i.theme?l.color:null,size:l.size,basemapId:l.basemapId,basemapTheme:l.basemapTheme}}async function Y(e){const{creatorParameters:i}=await P(e),{layer:a,field:s,theme:o,colorOptions:t}=i,{renderer:d,statistics:f}=await r(e),b=await C({...H(i),statistics:f}),y=await n(k(b)),w=y.visualVariable,h=(await l(F(b))).visualVariables,z=s?a.getField(s):null;await K(h,w,f,o,x(z));const g=t?.isContinuous||"above-and-below"!==o,V=d.visualVariables?.find(u);g&&V?.stops&&(V.stops.forEach(((e,i)=>e.value=w.stops[i].value)),p(d,y.authoringInfo,"color")),m(d,h,c);const O=v(d,"size");if((!o||"high-to-low"===o)&&O&&"reference-size"===O.theme&&2===O.sizeStops?.length){const{stops:e}=w;O.sizeStops[0].value=e[0].value,O.sizeStops[1].value=e.at(-1)?.value}if("above-and-below"===o&&h[0]?.stops){const e=h[0].stops;d.classBreakInfos[0].maxValue=e[2].value,d.classBreakInfos[1].minValue=e[2].value}return{renderer:d}}export{W as createContinuousRenderer,X as createRenderer,Q as createVisualVariables,Y as regenerateRenderer};
|
package/support/revision.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.31/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
const
|
|
5
|
+
const b="20241114",d="b4d9444bbe7bad37d65e78a285498f955cb78956";export{b as buildDate,d as commitHash};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.31/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import t from"../../core/Logger.js";import{animationDebugFlags as r}from"./animationDebugFlags.js";import{defaultCIMValues as e}from"./defaultCIMValues.js";import{AnimatedSymbolRepeatType as n,AnimatedSymbolEasingType as o}from"./enums.js";import{getProcessParam as
|
|
5
|
+
import t from"../../core/Logger.js";import{animationDebugFlags as r}from"./animationDebugFlags.js";import{defaultCIMValues as e}from"./defaultCIMValues.js";import{AnimatedSymbolRepeatType as n,AnimatedSymbolEasingType as o}from"./enums.js";import{getExtent as i}from"./SDFHelper.js";import{getProcessParam as a,getValue as s,getSize as m}from"./utils.js";import{TimeOrigin as l}from"../../views/2d/engine/webgl/animations/instructions.js";function c(t,r,e){return{transform:b(t,r,e.transform),fromColor:P(t,r,e.fromColor),toColor:g(t,r,e.toColor),colorMix:I(t,r,e.colorMix),toOpacity:T(t,r,e.toOpacity),opacityMix:h(t,r,e.opacityMix),hasAnimations:e.hasAnimations||!!r.animations&&r.animations.length>0}}function f(t){return!r.forceStaticPath&&(r.forceAnimatedPath||t.hasAnimations)}function p(r,e,n){if("CIMCharacterMarker"===e.type)return t.getLogger("animationUtils").error("#handleMarker()","CIM character markers do not support animations"),n;const o=a(r,e,"OffsetX"),i=a(r,e,"OffsetY");if("CIMPictureMarker"===e.type)return{...n,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!0,translation:D([o,i]),rotation:D(0),scale:D(a(r,e,"Size")),parent:n.transform}};const s=e.frame,m=s.ymax-s.ymin;return{...n,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!1,translation:D([o,i]),rotation:D(0),scale:D({type:"Process",op:"Divide",left:a(r,e,"Size"),right:m}),parent:n.transform}}}function u(t,r){let e=0,n=0;const o="Absolute"!==t.anchorPointUnits;return t.anchorPoint&&(e=-t.anchorPoint.x,n=-t.anchorPoint.y),{...r,transform:{type:"AnimatedTransform",relativeTranslation:o,absoluteScale:!1,translation:D([e,n]),rotation:D(0),scale:D(1),parent:r.transform}}}function y(t,r){return"Absolute"===t.anchorPointUnits?r:u(t,r)}function C(t,r){return"Absolute"!==t.anchorPointUnits?r:u(t,r)}function M(t,r,e){return{...t,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!1,translation:D([r,e]),rotation:D(0),scale:D(1),parent:t.transform}}}function S(t,r){const e=r?.5*-(r.xmin+r.xmax):0,n=r?.5*-(r.ymin+r.ymax):0;let o=0,a=0;if("x"in t&&"y"in t)o=t.x+e,a=t.y+n;else{const r=i(t);if(r){o=(r[0]+r[2])/2+e,a=(r[1]+r[3])/2+n}}return[o,a]}function A(t,r){switch(r.type){case"CIMPictureMarker":case"CIMVectorMarker":return a(t,r,"Rotation")}return 0}function d(t,r){switch(r.type){case"CIMPointSymbol":case"CIMVectorMarker":return[1,1,1,1];case"CIMSolidStroke":case"CIMSolidFill":return a(t,r,"Color");case"CIMPictureMarker":case"CIMPictureStroke":case"CIMPictureFill":return a(t,r,"TintColor")}return[1,1,1,1]}function b(t,r,e){return{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!1,translation:O(t,r),rotation:v(t,r),scale:x(t,r),parent:e}}function P(t,r,e){return{type:"AnimatedColor",color:D(d(t,r)),opacity:D(1),parent:e}}function g(t,r,e){const{animations:n}=r;let o=d(t,r);const i=n?.filter((t=>"CIMSymbolAnimationColor"===t.type))[0];return i&&(o=a(t,i,"ToColor")),{type:"AnimatedColor",color:D(o),opacity:D(1),parent:e}}function I(t,r,e){const{animations:n}=r,o=n?.filter((t=>"CIMSymbolAnimationColor"===t.type))[0];return o?{type:"AnimatedColor",color:D([1,1,1,1]),opacity:{from:0,to:1,timing:k(t,o?.animatedSymbolProperties)},parent:[1,1,1,1]}:e}function T(t,r,e){const{animations:n}=r;let o=D(1);const i=n?.filter((t=>"CIMSymbolAnimationTransparency"===t.type))[0];if(i){o=D({type:"Process",op:"Transparency",value:a(t,i,"ToTransparency")})}return{type:"AnimatedColor",color:D([1,1,1,1]),opacity:o,parent:e}}function h(t,r,e){const{animations:n}=r,o=n?.filter((t=>"CIMSymbolAnimationTransparency"===t.type))[0];return o?{type:"AnimatedColor",color:D([1,1,1,1]),opacity:{from:0,to:1,timing:k(t,o?.animatedSymbolProperties)},parent:[1,1,1,1]}:e}function k(t,r){if(!r)return{duration:1,startTimeOffset:0,repeatDelay:0,timeOriginSelector:l.Local,repeatType:n.Loop,easing:o.Linear,playAnimation:1,reverseAnimation:0};const i=a(t,r,"Duration");let m;if(a(t,r,"RandomizeStartTime")){m={type:"Process",op:"Random",min:0,max:i,seed:a(t,r,"RandomizeStartSeed")}}else m=a(t,r,"StartTimeOffset");const c=a(t,r,"RepeatDelay"),f=a(t,r,"PlayAnimation"),p=a(t,r,"ReverseAnimation"),u=s(r.repeatType,e.CIMAnimatedSymbolProperties.repeattype);return{duration:i,startTimeOffset:m,repeatDelay:c,timeOriginSelector:u===n.None?l.Local:l.Global,repeatType:u,easing:s(r.easing,e.CIMAnimatedSymbolProperties.easing),playAnimation:f,reverseAnimation:p}}function x(t,r){const{animations:e}=r;if("CIMPictureMarker"!==r.type&&"CIMVectorMarker"!==r.type&&"CIMPointSymbol"!==r.type)return D(1);let n;n="CIMPictureMarker"===r.type||"CIMVectorMarker"===r.type?a(t,r,"Size"):m(r)||10;const o=e?.filter((t=>"CIMSymbolAnimationScale"===t.type))[0];if(!o){const r=e?.filter((t=>"CIMSymbolAnimationSize"===t.type))[0];if(!r)return D(1);return{from:1,to:{type:"Process",op:"Divide",left:a(t,r,"ToSize"),right:n},timing:k(t,r.animatedSymbolProperties)}}return{from:1,to:a(t,o,"ScaleFactor"),timing:k(t,o.animatedSymbolProperties)}}function O(t,r){const{animations:e}=r,n=e?.filter((t=>"CIMSymbolAnimationOffset"===t.type))[0];if(!n)return D([0,0]);return{from:[0,0],to:[a(t,n,"OffsetX"),a(t,n,"OffsetY")],timing:k(t,n.animatedSymbolProperties)}}function v(t,r){const{animations:e}=r,n=A(t,r),o=e?.filter((t=>"CIMSymbolAnimationRotation"===t.type))[0];if(!o)return D(n);return{from:n,to:a(t,o,"ToRotation"),timing:k(t,o.animatedSymbolProperties)}}function D(t){return{from:t,to:t,timing:{duration:1,startTimeOffset:0,repeatDelay:0,timeOriginSelector:l.Local,repeatType:n.Loop,easing:o.Linear,playAnimation:1,reverseAnimation:0}}}function L(t){if(null==t)return!1;if("object"!=typeof t)return!1;if(t.animations&&Array.isArray(t.animations)&&t.animations.length>0)return!0;for(const r in t)if(L(t[r]))return!0;return!1}export{L as checkForAnimations,c as getAnimationParams,S as getFrameTranslation,D as getStaticParam,C as handleAbsoluteAnchor,u as handleAnchor,p as handleMarker,y as handleRelativeAnchor,f as shouldUseAnimatedPath,M as translate};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.31/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{isRGB as e}from"../../core/colorUtils.js";import{getFontFamily as r}from"../../core/fontUtils.js";import{clone as t}from"../../core/lang.js";import i from"../../core/Logger.js";import{pt2px as o,px2pt as a}from"../../core/screenUtils.js";import{numericHash as s}from"../../core/string.js";import{checkForAnimations as l,getAnimationParams as n,handleAbsoluteAnchor as p,handleMarker as c,handleRelativeAnchor as m,translate as y,getStaticParam as f,shouldUseAnimatedPath as h}from"./animationUtils.js";import{CIMSymbolHelper as d}from"./CIMSymbolHelper.js";import{defaultCIMValues as u}from"./defaultCIMValues.js";import{Alignment as v}from"./enums.js";import{OverrideHelper as O}from"./OverrideHelper.js";import{getExtent as _,getSDFMetrics as S,getSDFDimensions as g}from"./SDFHelper.js";import{colorToArray as M,normalizeAlpha as k,getSize as b,isCIMMarkerStrokePlacement as C,getTintColor as P,getNumericValue as x,normalizePrimitiveOverrideProps as z,getDefaultCIMValue as L,getEnum as I,getStrokeWidth as E,getFillColor as V,getStrokeColor as N,fromCIMFontDecoration as R,fromCIMFontStyle as w,fromCIMHorizontalAlignment as A,fromCIMVerticalAlignment as G,isValidCIMValue as X,uncapitalize as F}from"./utils.js";import{CIMEffectHelper as T}from"./effects/CIMEffectHelper.js";import{randomInsidePolygonTextureSize as Y}from"../../views/2d/engine/webgl/definitions.js";const j=()=>i.getLogger("esri.symbols.cim.cimAnalyzer");function W(e){const r=e.markerPlacement;return r&&r.angleToLine?v.MAP:v.SCREEN}class D{constructor(e){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[],e&&(this._resourceManager=e)}analyzeSymbolReference(r,t,i){if(this._cimLayers=i??[],!r)return this._cimLayers;if(this._reset(),r.primitiveOverrides){this._primitiveOverrides=r.primitiveOverrides;for(const r of this._primitiveOverrides){const t=r.valueExpressionInfo;if(t)this._setPoMap(r.primitiveName,r.propertyName,t);else if(null!=r.value){let t=r.value;r.propertyName.includes("Color")&&(e(t)&&(t=M(t)),t=k(t)),this._setPoMap(r.primitiveName,r.propertyName,t)}}}return this._analyzeSymbol(r.symbol,t),this._cimLayers}_reset(){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[]}_analyzeSymbol(e,r){switch(e?.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":this._analyzeMultiLayerSymbol(e,r)}}_analyzeMultiLayerSymbol(e,r){const t=e?.symbolLayers;if(!t)return;const i=e.effects;let o=v.SCREEN;const a=b(e)??0;"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(o=v.MAP);let s={transform:[0,0,0,1],fromColor:[1,1,1,1],toColor:[1,1,1,1],colorMix:[0,0,0,0],toOpacity:[1,1,1,1],opacityMix:[0,0,0,0],hasAnimations:l(e)};s=n(this._poMap,e,s);const p="CIMPolygonSymbol"===e.type;let c=t.length;for(;c--;){const l=t[c];if(!l||!1===l.enable)continue;let n;i?.length&&(n=[...i]);const m=l.effects;m?.length&&(i?n.push(...m):n=[...m]);let y=null;if(n){y=[];for(const e of n){const r=O.findEffectOverrides(e,this._primitiveOverrides);r&&y.push(r)}}const f=[];switch(O.findApplicableOverrides(l,this._primitiveOverrides,f),l.type){case"CIMSolidFill":this._analyzeSolidFill(l,y);break;case"CIMPictureFill":this._analyzePictureFill(l,y);break;case"CIMHatchFill":this._analyzeHatchFill(l,y);break;case"CIMGradientFill":this._analyzeGradientFill(l,y);break;case"CIMSolidStroke":this._analyzeSolidStroke(l,y,p,a);break;case"CIMPictureStroke":this._analyzePictureStroke(l,y,p,a);break;case"CIMGradientStroke":this._analyzeGradientStroke(l,y,p,a);break;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":{"CIMLineSymbol"!==e.type&&"CIMPolygonSymbol"!==e.type||(o=W(l));const t=[],i=l.primitiveName;i&&t.push(i);const n=p&&C(l.markerPlacement);this._analyzeMarker(l,y,null,t,o,a,r,[],s,!1,n);break}default:j().error("Cannot analyze CIM layer",l.type)}}}_analyzeSolidFill(e,r){const{primitiveName:t,type:i}=e,o=k(e.color);this._cimLayers.push({type:"fill",spriteRasterizationParam:null,colorLocked:!!e.colorLocked,color:this._getValueOrOverrideExpression(i,t,"Color",o),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:r,applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!1})}_analyzePictureFill(e,r){const{primitiveName:t,type:i}=e,o=P(e),a=x(e.height,u.CIMPictureFill.height);let s=x(e.scaleX,1);if("width"in e&&"number"==typeof e.width){const r=e.width;let t=1;const i=this._resourceManager.getResource(e.url);null!=i&&(t=i.width/i.height),s/=t*(a/r)}const l={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(t,i)};this._cimLayers.push({type:"fill",spriteRasterizationParam:l,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(i,t,"TintColor",o),height:this._getValueOrOverrideExpression(i,t,"Height",a),scaleX:this._getValueOrOverrideExpression(i,t,"ScaleX",s),angle:this._getValueOrOverrideExpression(i,t,"Rotation",x(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,t,"OffsetX",x(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,t,"OffsetY",x(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1})}_analyzeHatchFill(e,r){const{primitiveName:t,type:i}=e,o=this._analyzeMaterialOverrides(t,["Rotation","OffsetX","OffsetY"]),a=z(o);let s=[255,255,255,1],l=!1;if(e.lineSymbol?.symbolLayers)for(const p of e.lineSymbol.symbolLayers){if("CIMSolidStroke"!==p.type)continue;const e=p.primitiveName??t;l||!e||p.colorLocked||null==this._poMap[e]?.Color&&null==this._poMap[e]?.StrokeColor||(s=k(p.color),s=this._maybeGetValueOrOverrideExpression(e,"StrokeColor")??this._getValueOrOverrideExpression(i,e,"Color",s),l=!0);const r=this._maybeGetValueOrOverrideExpression(e,"StrokeWidth");if(r){let t=null,o=null;"number"==typeof r?t=r:o=r.valueExpressionInfo;let s=a.find((e=>"strokeWidth"===e.propertyName));s?s.propertyName="width":(s={type:"CIMPrimitiveOverride",primitiveName:e,propertyName:"width",valueExpressionInfo:o,value:t,defaultValue:L(i,"width")},a.push(s))}}const n={type:"sprite-rasterization-param",resource:e,overrides:a};this._cimLayers.push({type:"fill",spriteRasterizationParam:n,colorLocked:!!e.colorLocked,effects:r,color:s,height:this._getValueOrOverrideExpression(i,t,"Separation",x(e.separation,u.CIMHatchFill.separation)),scaleX:1,angle:this._getValueOrOverrideExpression(i,t,"Rotation",x(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,t,"OffsetX",x(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,t,"OffsetY",x(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!l})}_analyzeGradientFill(e,r){this._cimLayers.push({type:"fill",spriteRasterizationParam:null,colorLocked:!!e.colorLocked,effects:r,color:[128,128,128,1],height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1})}_analyzeSolidStroke(e,r,t,i){const{primitiveName:o,type:a}=e,s=k(e.color),l=x(e.width,u.CIMSolidStroke.width),n=I(e.capStyle,u.CIMSolidStroke.capstyle),p=I(e.joinStyle,u.CIMSolidStroke.joinstyle),c=e.miterLimit;let m,y,f,h,d=[];if(this._analyzePrimitiveOverrides(o,r,null,null)&&(d=this._getPrimitiveMaterialOverrides(o,a)),r&&Array.isArray(r)&&r.length>0){const e=r[r.length-1].effect;e&&"CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&(m=e.dashTemplate,y=e.scaleDash,f=e.offsetAlongLine,h=e.primitiveName,(r=[...r]).pop())}null!=h&&d.push(...this._getPrimitiveMaterialOverrides(h,a).filter((e=>"dashTemplate"===e.propertyName)));const v=void 0!==m?{type:"sprite-rasterization-param",resource:{type:"dash",dashTemplate:m,primitiveName:h},overrides:d}:null;this._cimLayers.push({type:"line",spriteRasterizationParam:v,isOutline:t,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(a,o,"Color",s),width:this._getValueOrOverrideExpression(a,o,"Width",l),cap:this._getValueOrOverrideExpression(a,o,"CapStyle",n),join:this._getValueOrOverrideExpression(a,o,"JoinStyle",p),miterLimit:c&&this._getValueOrOverrideExpression(a,o,"MiterLimit",c),referenceWidth:i,zOrder:U(e.name),dashTemplate:this._maybeGetValueOrOverrideExpression(h,"DashTemplate")??m,offsetAlongLine:this._getValueOrOverrideExpression(a,h,"OffsetAlongLine",f??0),scaleDash:y,sampleAlphaOnly:!0})}_analyzePictureStroke(e,r,t,i){const{primitiveName:o,type:a}=e,s=P(e),l=x(e.width,u.CIMPictureStroke.width),n=I(e.capStyle,u.CIMPictureStroke.capstyle),p=I(e.joinStyle,u.CIMPictureStroke.joinstyle),c=e.miterLimit,m={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(o,a)};this._cimLayers.push({type:"line",spriteRasterizationParam:m,isOutline:t,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(a,o,"TintColor",s),width:this._getValueOrOverrideExpression(a,o,"Width",l),cap:this._getValueOrOverrideExpression(a,o,"CapStyle",n),join:this._getValueOrOverrideExpression(a,o,"JoinStyle",p),miterLimit:c&&this._getValueOrOverrideExpression(a,o,"MiterLimit",c),referenceWidth:i,zOrder:U(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1})}_analyzeGradientStroke(e,r,t,i){const{primitiveName:o,type:a}=e,s=x(e.width,u.CIMSolidStroke.width),l=I(e.capStyle,u.CIMGradientStroke.capstyle),n=I(e.joinStyle,u.CIMGradientStroke.joinstyle),p=e.miterLimit;this._cimLayers.push({type:"line",spriteRasterizationParam:null,isOutline:t,colorLocked:!!e.colorLocked,effects:r,color:[128,128,128,1],width:this._getValueOrOverrideExpression(a,o,"Width",s),cap:this._getValueOrOverrideExpression(a,o,"CapStyle",l),join:this._getValueOrOverrideExpression(a,o,"JoinStyle",n),miterLimit:p&&this._getValueOrOverrideExpression(a,o,"MiterLimit",p),referenceWidth:i,zOrder:U(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1})}_analyzeMarker(e,r,t,i,o,a,s,l,y,f=!1,h=!1){if(f||=!!e.colorLocked,this._analyzeMarkerInsidePolygon(e,r,f))return;const d=x(e.size,u.CIMVectorMarker.size),v=x(e.rotation),O=x(e.offsetX),_=x(e.offsetY),{primitiveName:S,type:g}=e,M=this._getValueOrOverrideExpression(g,S,"Size",d),k=this._getValueOrOverrideExpression(g,S,"Rotation",v),b=this._getValueOrOverrideExpression(g,S,"OffsetX",O),C=this._getValueOrOverrideExpression(g,S,"OffsetY",_);let P=y;switch(P=p(e,P),P=c(this._poMap,e,P),P=m(e,P),P=n(this._poMap,e,P),e.type){case"CIMPictureMarker":this._analyzePictureMarker(e,r,t,i,o,a,M,k,b,C,l,P,f,h);break;case"CIMVectorMarker":this._analyzeVectorMarker(e,r,t,i,o,a,M,k,b,C,l,P,s,f,h)}}_analyzeMarkerInsidePolygon(e,r,t){const{markerPlacement:i,type:o}=e;if(!i||"CIMMarkerPlacementInsidePolygon"!==i.type)return!1;if("CIMVectorMarker"===o||"CIMPictureMarker"===o){const t=e.primitiveName;if(t&&this._analyzePrimitiveOverrides([t],r,null,null))return!1;const a=i.primitiveName;if(a&&this._analyzePrimitiveOverrides([a],r,null,null))return!1;if("CIMVectorMarker"===o){const{markerGraphics:r}=e;if(r)for(const e of r){const{symbol:r}=e;if("CIMPolygonSymbol"===r?.type&&r.symbolLayers){const{symbolLayers:e}=r;for(const r of e)if("CIMSolidStroke"===r.type)return!1}}}else{const{animatedSymbolProperties:r}=e;if(r)return!1}}const s=Math.abs(i.stepX),l=Math.abs(i.stepY);if(0===s||0===l)return!0;let n,p;if("Random"===i.gridType){const e=a(Y),r=Math.max(Math.floor(e/s),1);n=l*Math.max(Math.floor(e/l),1);p=r*s/n}else i.shiftOddRows?(n=2*l,p=s/l*.5):(n=l,p=s/l);const c=P(e),m="CIMCharacterMarker"===e.type?null:{type:"sprite-rasterization-param",resource:e,overrides:[]};return this._cimLayers.push({type:"fill",spriteRasterizationParam:m,colorLocked:t,effects:r,color:c,height:n,scaleX:p,angle:i.gridAngle,offsetX:x(i.offsetX),offsetY:x(i.offsetY),applyRandomOffset:"Random"===i.gridType,sampleAlphaOnly:"CIMPictureMarker"!==e.type,hasUnresolvedReplacementColor:!0}),!0}_analyzePictureMarker(e,r,i,o,a,l,n,p,c,m,y,f,h,d){const{animatedSymbolProperties:u,primitiveName:v,type:O}=e;let _=x(e.scaleX,1);const S=P(e);i||(i=this._createMarkerPlacementOverrideExpression(e.markerPlacement));const g=this._createGIFAnimatedSymbolPropertiesOverrideExpression(u),M=e.anchorPoint??{x:0,y:0};if("width"in e&&"number"==typeof e.width){const r=e.width;let t=1;const i=this._resourceManager.getResource(e.url);null!=i&&(t=i.width/i.height);_/=t*(x(e.size)/r)}const k=[...o];let b;e.primitiveName&&k.push(e.primitiveName),u||g?b={type:"animated",url:e.url,urlHash:"H"+s(e.url),playAnimation:e.animatedSymbolProperties?.playAnimation,reverseAnimation:e.animatedSymbolProperties?.reverseAnimation,randomizeStartTime:e.animatedSymbolProperties?.randomizeStartTime,randomizeStartSeed:e.animatedSymbolProperties?.randomizeStartSeed,startTimeOffset:e.animatedSymbolProperties?.startTimeOffset,duration:e.animatedSymbolProperties?.duration,repeatType:e.animatedSymbolProperties?.repeatType,repeatDelay:e.animatedSymbolProperties?.repeatDelay}:(b=t(e),b.markerPlacement=null);const C={type:"sprite-rasterization-param",resource:b,overrides:this._getMaterialOverrides(k,O)};g&&C.overrides.push(...g.overrides);const z=n;this._cimLayers.push({type:"marker",spriteRasterizationParam:C,colorLocked:h,effects:r,scaleSymbolsProportionally:!1,alignment:a,size:n,scaleX:this._getValueOrOverrideExpression(O,v,"ScaleX",_),rotation:p,offsetX:c,offsetY:m,transform:{type:"cim-marker-transform-param",params:y},color:this._getValueOrOverrideExpression(O,v,"TintColor",S),anchorPoint:{x:M.x,y:M.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:[0,0,0,0],outlineWidth:0,frameHeight:0,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:1,isOutline:d,markerPlacement:i,animationParams:Q(f),baseSize:z})}_analyzeVectorMarker(e,r,t,i,o,a,s,l,p,c,m,h,d,u,v){const O=e.markerGraphics;if(!O)return;const _=e.frame;let S=0;S=_?_.ymax-_.ymin:a;const g=!!e.scaleSymbolsProportionally;if(S){const r={offsetX:p,offsetY:c,rotation:l,size:s,frameHeight:S,rotateClockWise:!!e.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:g};m=[...m,r]}t||(t=this._createMarkerPlacementOverrideExpression(e.markerPlacement));for(const M of O)if(M){const s=M.symbol;if(!s)continue;const l=M.primitiveName;l&&i.push(l);let p,c=h;if(("CIMPointSymbol"===s.type||"CIMTextSymbol"===s.type)&&_){let r=0,t=0;const i=M.geometry;"x"in i&&"y"in i&&(r+=i.x-.5*(_.xmin+_.xmax),t+=i.y-.5*(_.ymin+_.ymax));const o=e.anchorPoint;let a=!1;o&&("Absolute"===e.anchorPointUnits?(r-=o.x,t-=o.y,a=!0):_&&(r-=(_.xmax-_.xmin)*o.x,t-=(_.ymax-_.ymin)*o.y));const s={offsetX:r,offsetY:t,rotation:0,size:0,frameHeight:0,rotateClockWise:!1,absoluteAnchorPoint:a,scaleSymbolsProportionally:g};p=[...m,s]}if("CIMPointSymbol"===s.type||"CIMTextSymbol"===s.type){const e=M.geometry;if("x"in e&&"y"in e){const{x:r,y:t}=e,i=_?.5*-(_.xmin+_.xmax):0,o=_?.5*-(_.ymin+_.ymax):0;r+i===0&&t+o===0||(c=y(c,r+i,t+o))}}switch("CIMPointSymbol"===s.type&&(c=n(this._poMap,s,c)),s.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":d||q(s)?(c={...c,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!0,translation:f([0,0]),rotation:f(0),scale:f(S),parent:h.transform}},this._analyzeMultiLayerGraphicNonSDF(e,r,t,M,i,o,a,p??m,c,S,u,v)):this._analyzeMultiLayerGraphic(e,r,t,M,i,o,a,p??m,c,S,u,v);break;case"CIMTextSymbol":this._analyzeTextGraphic(r,t,M,i,o,a,p??m,u)}l&&i.pop()}}_analyzeMultiLayerGraphic(e,r,t,i,o,a,s,l,p,c,m,y){const f=i.symbol,d=f.symbolLayers;if(!d)return;let v=d.length;if(B(d)&&!h(p))return void this._analyzeCompositeMarkerGraphic(e,r,t,i,d,a,s,l,c,m,y);const O=this._resourceManager.geometryEngine,M=T.applyEffects(f.effects,i.geometry,O);if(M)for(;v--;){const f=d[v];if(!f||!1===f.enable)continue;const h=f.primitiveName;switch(h&&o.push(h),f.type){case"CIMSolidFill":case"CIMSolidStroke":{const o=T.applyEffects(f.effects,M,O),d=_(o);if(!d)continue;const v="Relative"!==e.anchorPointUnits,b=E(f)??0,{frameSizeRatio:C,anchorX:P,anchorY:z,widthRatio:L,sdfPaddingRatio:I}=S(d,e.frame,e.size,e.anchorPoint,v,b,e.scaleSymbolsProportionally),R="CIMSolidFill"===f.type,w={type:"sdf",geom:o,sdfPaddingRatio:I,asFill:R},{path:A}=f,G=R?k(V(f)):null==A?k(N(f)):[0,0,0,0],X=R?[0,0,0,0]:k(N(f));if(!R&&!b)break;const F=i.primitiveName;let Y=null;R&&!f.colorLocked&&(Y=this._maybeGetValueOrOverrideExpression(F,"FillColor"));let j=null;R||f.colorLocked||(j=this._maybeGetValueOrOverrideExpression(F,"StrokeColor"));const W=Y??this._getValueOrOverrideExpression(f.type,h,"Color",G),D=j??this._getValueOrOverrideExpression(f.type,h,"Color",X),H=this._maybeGetValueOrOverrideExpression(F,"StrokeWidth")??this._getValueOrOverrideExpression(f.type,h,"Width",b),U=A?{type:"sprite-rasterization-param",resource:{type:"path",path:A,asFill:R},overrides:[]}:{type:"sprite-rasterization-param",resource:w,overrides:[]},J=n(this._poMap,f,p),B=x(e.size,u.CIMVectorMarker.size),q=this._getValueOrOverrideExpression(e.type,e.primitiveName,"Size",B);this._cimLayers.push({type:"marker",spriteRasterizationParam:U,colorLocked:!!f.colorLocked||!!m,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:P,y:z},isAbsoluteAnchorPoint:v,size:c,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:c,widthRatio:L,rotateClockwise:!1,referenceSize:s,sizeRatio:C,color:W,outlineColor:D,outlineWidth:H,isOutline:y,markerPlacement:t,animationParams:Q(J),isStroke:"CIMSolidFill"!==f.type,baseSize:q,...g(o,I)});break}case"CIMPictureMarker":case"CIMVectorMarker":f.markerPlacement?this._analyzeMultiLayerGraphicNonSDF(e,r,t,i,o,a,s,l,p,c,!!f.colorLocked||!!m,y):this._analyzeMarker(f,r,t,o,a,s,!1,l,p,m,y);break;default:this._analyzeMultiLayerGraphicNonSDF(e,r,t,i,o,a,s,l,p,c,!!f.colorLocked||!!m,y)}h&&o.pop()}}_analyzeTextGraphic(e,t,i,o,a,s,l,n){const p=[];O.findApplicableOverrides(i,this._primitiveOverrides,p);const c=i.geometry;if(!("x"in c)||!("y"in c))return;const m=i.symbol,y=R(m),f=w(m.fontStyleName),h=r(m.fontFamilyName);m.font={family:h,decoration:y,...f};const d=x(m.height,u.CIMTextSymbol.height),v=x(m.angle),_=x(m.offsetX),S=x(m.offsetY),{haloSymbol:g}=m,M=x(m.haloSize,0);let b=[0,0,0,0];if(g?.symbolLayers?.length){const e=g.symbolLayers;for(const r of e)if(r.color){b=this._getValueOrOverrideExpression(m?.haloSymbol?.type??"CIMPolygonSymbol",r.primitiveName,"Color",k(r.color));break}}const C=i.primitiveName;let P=[0,0,0,1],z=[0,0,0,0],L=0,I=!1;if(m.symbol?.symbolLayers)for(const r of m.symbol.symbolLayers){const e=r.primitiveName;if("CIMSolidStroke"===r.type)z=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Color",k(r.color)),L=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Width",E(r)??0);else if("CIMSolidFill"===r.type){const t=k(r.color);I=I??!!r.colorLocked,P=this._getValueOrOverrideExpression("CIMSolidFill",e??C,"Color",t)}}let V=null,N=null,X=null,F=null,T=null;C&&(V=this._maybeGetValueOrOverrideExpression(C,"TextSize"),N=this._maybeGetValueOrOverrideExpression(C,"TextAngle"),X=this._maybeGetValueOrOverrideExpression(C,"TextOffsetX"),F=this._maybeGetValueOrOverrideExpression(C,"TextOffsetY"),I||(T=this._maybeGetValueOrOverrideExpression(C,"FillColor")));const Y=T??P;let j=null,W=null,D=0;if(m.callout&&"CIMBackgroundCallout"===m.callout.type){const e=m.callout;if(e.backgroundSymbol){const r=e.backgroundSymbol.symbolLayers;if(r)for(const e of r)"CIMSolidFill"===e.type?j=k(e.color):"CIMSolidStroke"===e.type&&(W=k(e.color),D=x(e.width,u.CIMSolidStroke.width))}}const H=this._getValueOrOverrideExpression(m.type,i.primitiveName,"TextString",i.textString??"");if(null==H)return;const{fontStyleName:U}=m,J=h+(U?"-"+U.toLowerCase():"-regular"),B=this._getMaterialOverrides(o,m.type);B.push(...this._getPrimitiveMaterialOverrides(i.primitiveName,m.type));const q={type:"text-rasterization-param",resource:{type:"text",textString:i.textString??"",font:m.font,symbol:m,primitiveName:i.primitiveName},overrides:B};this._cimLayers.push({type:"text",lineWidth:m.lineWidth,textRasterizationParam:q,colorLocked:!!n||!!I,effects:e,alignment:a,anchorPoint:{x:0,y:0},isAbsoluteAnchorPoint:!1,fontName:J,decoration:y,haloSize:M,haloColor:b,weight:f.weight,style:f.style,size:V??d,angle:N??v,offsetX:X??_,offsetY:F??S,transform:{type:"cim-marker-transform-param",params:l},horizontalAlignment:A(m.horizontalAlignment),verticalAlignment:G(m.verticalAlignment),text:H,color:Y,outlineColor:z,outlineSize:L,backgroundColor:j,borderLineColor:W,borderLineWidth:D,referenceSize:s,sizeRatio:1,markerPlacement:t})}_analyzeMultiLayerGraphicNonSDF(e,r,t,i,a,s,l,n,p,c,m,y){const f=H(e,i),h=e.primitiveName,v=this._analyzeMaterialOverrides(h,["Rotation","OffsetX","OffsetY"]),O=z(v),[_,S,g]=d.getTextureAnchor(f,this._resourceManager),M=this._getMaterialOverrides(a,e.type);M.push(...O);const k={type:"sprite-rasterization-param",resource:{...f,avoidSDFRasterization:!0},overrides:M},b=x(e.size,u.CIMVectorMarker.size),C=this._getValueOrOverrideExpression(e.type,h,"Size",b);this._cimLayers.push({type:"marker",spriteRasterizationParam:k,colorLocked:m,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:s,anchorPoint:{x:_,y:S},isAbsoluteAnchorPoint:!1,size:c,rotation:0,offsetX:0,offsetY:0,transform:{type:"cim-marker-transform-param",params:n},color:[255,255,255,1],outlineColor:[0,0,0,0],outlineWidth:0,scaleX:1,frameHeight:c,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:g/o(e.size),isOutline:y,markerPlacement:t,animationParams:Q(p),baseSize:C})}_createMarkerPlacementOverrideExpression(e){if(!e)return null;const r=[];return O.findApplicableOverrides(e,this._primitiveOverrides,r),{type:"cim-marker-placement-param",placement:e,overrides:K(r)}}_createGIFAnimatedSymbolPropertiesOverrideExpression(e){if(!e)return null;const r=[];return O.findApplicableOverrides(e,this._primitiveOverrides,r),{type:"cim-gif-animation-params",animation:e,overrides:K(r)}}_analyzeCompositeMarkerGraphic(e,r,t,i,o,a,s,l,n,p,c){const m=i.geometry,y=o[0],f=o[1],h=_(m);if(!h)return;const d="Relative"!==e.anchorPointUnits,v=x(y.width,u.CIMSolidStroke.width),{frameSizeRatio:O,anchorX:g,anchorY:M,widthRatio:b,sdfPaddingRatio:C}=S(h,e.frame,e.size,e.anchorPoint,d,v,e.scaleSymbolsProportionally),{path:P}=f,z=f.primitiveName,L=y.primitiveName,I=i.primitiveName;let E=null;f.colorLocked||p||(E=this._maybeGetValueOrOverrideExpression(I,"FillColor"));const V=E??this._getValueOrOverrideExpression(f.type,z,"Color",k(f.color));let N=null;y.colorLocked||p||(N=this._maybeGetValueOrOverrideExpression(I,"StrokeColor"));const R=N??this._getValueOrOverrideExpression(y.type,L,"Color",k(y.color)),w=this._maybeGetValueOrOverrideExpression(I,"StrokeWidth")??this._getValueOrOverrideExpression(y.type,L,"Width",v),A={type:"sprite-rasterization-param",resource:P?{type:"path",path:P,asFill:!0}:{type:"sdf",geom:m,sdfPaddingRatio:C,asFill:!0},overrides:[]};this._cimLayers.push({type:"marker",spriteRasterizationParam:A,colorLocked:p,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:g,y:M},isAbsoluteAnchorPoint:d,size:n,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:n,widthRatio:b,rotateClockwise:!1,referenceSize:s,sizeRatio:O,color:V,outlineColor:R,outlineWidth:w,isOutline:c,markerPlacement:t})}_setPoMap(e,r,t){let i;this._poMap[e]?i=this._poMap[e]:(i={},this._poMap[e]=i),i[r]=t}_maybeGetValueOrOverrideExpression(e,r,t){return this._getValueOrOverrideExpression("",e,r,t,!1)}_getValueOrOverrideExpression(e,r,t,i,o=!0){if(o&&!X(i)&&(i=L(e,t.toLowerCase())),null==r)return i;const a=this._poMap[r];if(null==a)return i;const s=a[t];return"string"==typeof s||"number"==typeof s||Array.isArray(s)?s:s?{valueExpressionInfo:s,defaultValue:i}:i}_analyzePrimitiveOverrides(e,r,t,i){if(null==e)return!1;"string"==typeof e&&(e=[e]);for(const o of this._primitiveOverrides)if(e.includes(o.primitiveName)&&o.valueExpressionInfo)return!0;if(null!=r)for(const o of r)if(o?.overrides.length>0)return!0;if(null!=t)for(const o of t)if(o?.overrides.length>0)return!0;if(null!=i)for(const o of i)if(o?.overrides.length>0)return!0;return!1}_getMaterialOverrides(e,r){if(!e)return[];const t=[];for(const i of e)t.push(...this._getPrimitiveMaterialOverrides(i,r));return t}_getPrimitiveMaterialOverrides(e,r){if(!e)return[];const t=z(this._primitiveOverrides.filter((r=>r.primitiveName===e)));return t.forEach((e=>e.defaultValue=L(r,e.propertyName.toLowerCase()))),t}_analyzeMaterialOverrides(e,r){return this._primitiveOverrides.filter((t=>t.primitiveName!==e||!r.includes(t.propertyName)))}}function H(e,r){return{type:e.type,enable:!0,name:e.name,colorLocked:e.colorLocked,primitiveName:e.primitiveName,anchorPoint:e.anchorPoint,anchorPointUnits:e.anchorPointUnits,offsetX:0,offsetY:0,rotateClockwise:e.rotateClockwise,rotation:0,size:e.size,billboardMode3D:e.billboardMode3D,depth3D:e.depth3D,frame:e.frame,markerGraphics:[r],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function U(e){if(e&&0===e.indexOf("Level_")){const r=parseInt(e.slice(6),10);if(!isNaN(r))return r}return 0}function J(e,r){if(!r||0===r.length)return e;const i=t(e);return O.applyOverrides(i,r),i}const B=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&null==e[0].path&&null==e[1].path&&!e[0].effects&&!e[1].effects&&!e[0].animations&&!e[1].animations;function q(e){const r=e.symbolLayers;if(!r)return!1;const t=r.find((e=>e.effects?.find((e=>"CIMGeometricEffectDashes"===e.type&&null!=e.dashTemplate)))),i=r.find((e=>e.effects?.find((e=>"CIMGeometricEffectAddControlPoints"===e.type))));return!!t||!!i}function K(e){return t(e).map((e=>({...e,propertyName:F(e.propertyName)})))}function Q(e){return h(e)?{type:"animation-params",params:e}:null}export{D as CIMAnalyzer,J as analyzeCIMResource};
|
|
5
|
+
import{isRGB as e}from"../../core/colorUtils.js";import{getFontFamily as r}from"../../core/fontUtils.js";import{clone as t}from"../../core/lang.js";import i from"../../core/Logger.js";import{pt2px as o,px2pt as a}from"../../core/screenUtils.js";import{numericHash as s}from"../../core/string.js";import{checkForAnimations as l,getAnimationParams as n,handleAbsoluteAnchor as p,handleMarker as c,handleRelativeAnchor as m,getFrameTranslation as y,translate as f,getStaticParam as h,shouldUseAnimatedPath as d}from"./animationUtils.js";import{CIMSymbolHelper as u}from"./CIMSymbolHelper.js";import{defaultCIMValues as v}from"./defaultCIMValues.js";import{Alignment as O}from"./enums.js";import{OverrideHelper as _}from"./OverrideHelper.js";import{getExtent as g,getSDFMetrics as S,getSDFDimensions as M}from"./SDFHelper.js";import{colorToArray as k,normalizeAlpha as b,getSize as C,isCIMMarkerStrokePlacement as P,getTintColor as z,getNumericValue as x,normalizePrimitiveOverrideProps as L,getDefaultCIMValue as I,getEnum as E,getStrokeWidth as V,getFillColor as N,getStrokeColor as R,fromCIMFontDecoration as w,fromCIMFontStyle as A,fromCIMHorizontalAlignment as G,fromCIMVerticalAlignment as X,isValidCIMValue as F,uncapitalize as T}from"./utils.js";import{CIMEffectHelper as Y}from"./effects/CIMEffectHelper.js";import{randomInsidePolygonTextureSize as j}from"../../views/2d/engine/webgl/definitions.js";const W=()=>i.getLogger("esri.symbols.cim.cimAnalyzer");function D(e){const r=e.markerPlacement;return r&&r.angleToLine?O.MAP:O.SCREEN}class H{constructor(e){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[],e&&(this._resourceManager=e)}analyzeSymbolReference(r,t,i){if(this._cimLayers=i??[],!r)return this._cimLayers;if(this._reset(),r.primitiveOverrides){this._primitiveOverrides=r.primitiveOverrides;for(const r of this._primitiveOverrides){const t=r.valueExpressionInfo;if(t)this._setPoMap(r.primitiveName,r.propertyName,t);else if(null!=r.value){let t=r.value;r.propertyName.includes("Color")&&(e(t)&&(t=k(t)),t=b(t)),this._setPoMap(r.primitiveName,r.propertyName,t)}}}return this._analyzeSymbol(r.symbol,t),this._cimLayers}_reset(){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[]}_analyzeSymbol(e,r){switch(e?.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":this._analyzeMultiLayerSymbol(e,r)}}_analyzeMultiLayerSymbol(e,r){const t=e?.symbolLayers;if(!t)return;const i=e.effects;let o=O.SCREEN;const a=C(e)??0;"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(o=O.MAP);let s={transform:[0,0,0,1],fromColor:[1,1,1,1],toColor:[1,1,1,1],colorMix:[0,0,0,0],toOpacity:[1,1,1,1],opacityMix:[0,0,0,0],hasAnimations:l(e)};s=n(this._poMap,e,s);const p="CIMPolygonSymbol"===e.type;let c=t.length;for(;c--;){const l=t[c];if(!l||!1===l.enable)continue;let n;i?.length&&(n=[...i]);const m=l.effects;m?.length&&(i?n.push(...m):n=[...m]);let y=null;if(n){y=[];for(const e of n){const r=_.findEffectOverrides(e,this._primitiveOverrides);r&&y.push(r)}}const f=[];switch(_.findApplicableOverrides(l,this._primitiveOverrides,f),l.type){case"CIMSolidFill":this._analyzeSolidFill(l,y);break;case"CIMPictureFill":this._analyzePictureFill(l,y);break;case"CIMHatchFill":this._analyzeHatchFill(l,y);break;case"CIMGradientFill":this._analyzeGradientFill(l,y);break;case"CIMSolidStroke":this._analyzeSolidStroke(l,y,p,a);break;case"CIMPictureStroke":this._analyzePictureStroke(l,y,p,a);break;case"CIMGradientStroke":this._analyzeGradientStroke(l,y,p,a);break;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":{"CIMLineSymbol"!==e.type&&"CIMPolygonSymbol"!==e.type||(o=D(l));const t=[],i=l.primitiveName;i&&t.push(i);const n=p&&P(l.markerPlacement);this._analyzeMarker(l,y,null,t,o,a,r,[],s,!1,n);break}default:W().error("Cannot analyze CIM layer",l.type)}}}_analyzeSolidFill(e,r){const{primitiveName:t,type:i}=e,o=b(e.color);this._cimLayers.push({type:"fill",spriteRasterizationParam:null,colorLocked:!!e.colorLocked,color:this._getValueOrOverrideExpression(i,t,"Color",o),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:r,applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!1})}_analyzePictureFill(e,r){const{primitiveName:t,type:i}=e,o=z(e),a=x(e.height,v.CIMPictureFill.height);let s=x(e.scaleX,1);if("width"in e&&"number"==typeof e.width){const r=e.width;let t=1;const i=this._resourceManager.getResource(e.url);null!=i&&(t=i.width/i.height),s/=t*(a/r)}const l={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(t,i)};this._cimLayers.push({type:"fill",spriteRasterizationParam:l,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(i,t,"TintColor",o),height:this._getValueOrOverrideExpression(i,t,"Height",a),scaleX:this._getValueOrOverrideExpression(i,t,"ScaleX",s),angle:this._getValueOrOverrideExpression(i,t,"Rotation",x(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,t,"OffsetX",x(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,t,"OffsetY",x(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1})}_analyzeHatchFill(e,r){const{primitiveName:t,type:i}=e,o=this._analyzeMaterialOverrides(t,["Rotation","OffsetX","OffsetY"]),a=L(o);let s=[255,255,255,1],l=!1;if(e.lineSymbol?.symbolLayers)for(const p of e.lineSymbol.symbolLayers){if("CIMSolidStroke"!==p.type)continue;const e=p.primitiveName??t;l||!e||p.colorLocked||null==this._poMap[e]?.Color&&null==this._poMap[e]?.StrokeColor||(s=b(p.color),s=this._maybeGetValueOrOverrideExpression(e,"StrokeColor")??this._getValueOrOverrideExpression(i,e,"Color",s),l=!0);const r=this._maybeGetValueOrOverrideExpression(e,"StrokeWidth");if(r){let t=null,o=null;"number"==typeof r?t=r:o=r.valueExpressionInfo;let s=a.find((e=>"strokeWidth"===e.propertyName));s?s.propertyName="width":(s={type:"CIMPrimitiveOverride",primitiveName:e,propertyName:"width",valueExpressionInfo:o,value:t,defaultValue:I(i,"width")},a.push(s))}}const n={type:"sprite-rasterization-param",resource:e,overrides:a};this._cimLayers.push({type:"fill",spriteRasterizationParam:n,colorLocked:!!e.colorLocked,effects:r,color:s,height:this._getValueOrOverrideExpression(i,t,"Separation",x(e.separation,v.CIMHatchFill.separation)),scaleX:1,angle:this._getValueOrOverrideExpression(i,t,"Rotation",x(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,t,"OffsetX",x(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,t,"OffsetY",x(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!l})}_analyzeGradientFill(e,r){this._cimLayers.push({type:"fill",spriteRasterizationParam:null,colorLocked:!!e.colorLocked,effects:r,color:[128,128,128,1],height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1})}_analyzeSolidStroke(e,r,t,i){const{primitiveName:o,type:a}=e,s=b(e.color),l=x(e.width,v.CIMSolidStroke.width),n=E(e.capStyle,v.CIMSolidStroke.capstyle),p=E(e.joinStyle,v.CIMSolidStroke.joinstyle),c=e.miterLimit;let m,y,f,h,d=[];if(this._analyzePrimitiveOverrides(o,r,null,null)&&(d=this._getPrimitiveMaterialOverrides(o,a)),r&&Array.isArray(r)&&r.length>0){const e=r[r.length-1].effect;e&&"CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&(m=e.dashTemplate,y=e.scaleDash,f=e.offsetAlongLine,h=e.primitiveName,(r=[...r]).pop())}null!=h&&d.push(...this._getPrimitiveMaterialOverrides(h,a).filter((e=>"dashTemplate"===e.propertyName)));const u=void 0!==m?{type:"sprite-rasterization-param",resource:{type:"dash",dashTemplate:m,primitiveName:h},overrides:d}:null;this._cimLayers.push({type:"line",spriteRasterizationParam:u,isOutline:t,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(a,o,"Color",s),width:this._getValueOrOverrideExpression(a,o,"Width",l),cap:this._getValueOrOverrideExpression(a,o,"CapStyle",n),join:this._getValueOrOverrideExpression(a,o,"JoinStyle",p),miterLimit:c&&this._getValueOrOverrideExpression(a,o,"MiterLimit",c),referenceWidth:i,zOrder:J(e.name),dashTemplate:this._maybeGetValueOrOverrideExpression(h,"DashTemplate")??m,offsetAlongLine:this._getValueOrOverrideExpression(a,h,"OffsetAlongLine",f??0),scaleDash:y,sampleAlphaOnly:!0})}_analyzePictureStroke(e,r,t,i){const{primitiveName:o,type:a}=e,s=z(e),l=x(e.width,v.CIMPictureStroke.width),n=E(e.capStyle,v.CIMPictureStroke.capstyle),p=E(e.joinStyle,v.CIMPictureStroke.joinstyle),c=e.miterLimit,m={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(o,a)};this._cimLayers.push({type:"line",spriteRasterizationParam:m,isOutline:t,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(a,o,"TintColor",s),width:this._getValueOrOverrideExpression(a,o,"Width",l),cap:this._getValueOrOverrideExpression(a,o,"CapStyle",n),join:this._getValueOrOverrideExpression(a,o,"JoinStyle",p),miterLimit:c&&this._getValueOrOverrideExpression(a,o,"MiterLimit",c),referenceWidth:i,zOrder:J(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1})}_analyzeGradientStroke(e,r,t,i){const{primitiveName:o,type:a}=e,s=x(e.width,v.CIMSolidStroke.width),l=E(e.capStyle,v.CIMGradientStroke.capstyle),n=E(e.joinStyle,v.CIMGradientStroke.joinstyle),p=e.miterLimit;this._cimLayers.push({type:"line",spriteRasterizationParam:null,isOutline:t,colorLocked:!!e.colorLocked,effects:r,color:[128,128,128,1],width:this._getValueOrOverrideExpression(a,o,"Width",s),cap:this._getValueOrOverrideExpression(a,o,"CapStyle",l),join:this._getValueOrOverrideExpression(a,o,"JoinStyle",n),miterLimit:p&&this._getValueOrOverrideExpression(a,o,"MiterLimit",p),referenceWidth:i,zOrder:J(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1})}_analyzeMarker(e,r,t,i,o,a,s,l,y,f=!1,h=!1){if(f||=!!e.colorLocked,this._analyzeMarkerInsidePolygon(e,r,f))return;const d=x(e.size,v.CIMVectorMarker.size),u=x(e.rotation),O=x(e.offsetX),_=x(e.offsetY),{primitiveName:g,type:S}=e,M=this._getValueOrOverrideExpression(S,g,"Size",d),k=this._getValueOrOverrideExpression(S,g,"Rotation",u),b=this._getValueOrOverrideExpression(S,g,"OffsetX",O),C=this._getValueOrOverrideExpression(S,g,"OffsetY",_);let P=y;switch(P=p(e,P),P=c(this._poMap,e,P),P=m(e,P),P=n(this._poMap,e,P),e.type){case"CIMPictureMarker":this._analyzePictureMarker(e,r,t,i,o,a,M,k,b,C,l,P,f,h);break;case"CIMVectorMarker":this._analyzeVectorMarker(e,r,t,i,o,a,M,k,b,C,l,P,s,f,h)}}_analyzeMarkerInsidePolygon(e,r,t){const{markerPlacement:i,type:o}=e;if(!i||"CIMMarkerPlacementInsidePolygon"!==i.type)return!1;if("CIMVectorMarker"===o||"CIMPictureMarker"===o){const t=e.primitiveName;if(t&&this._analyzePrimitiveOverrides([t],r,null,null))return!1;const a=i.primitiveName;if(a&&this._analyzePrimitiveOverrides([a],r,null,null))return!1;if("CIMVectorMarker"===o){const{markerGraphics:r}=e;if(r)for(const e of r){const{symbol:r}=e;if("CIMPolygonSymbol"===r?.type&&r.symbolLayers){const{symbolLayers:e}=r;for(const r of e)if("CIMSolidStroke"===r.type)return!1}}}else{const{animatedSymbolProperties:r}=e;if(r)return!1}}const s=Math.abs(i.stepX),l=Math.abs(i.stepY);if(0===s||0===l)return!0;let n,p;if("Random"===i.gridType){const e=a(j),r=Math.max(Math.floor(e/s),1);n=l*Math.max(Math.floor(e/l),1);p=r*s/n}else i.shiftOddRows?(n=2*l,p=s/l*.5):(n=l,p=s/l);const c=z(e),m="CIMCharacterMarker"===e.type?null:{type:"sprite-rasterization-param",resource:e,overrides:[]};return this._cimLayers.push({type:"fill",spriteRasterizationParam:m,colorLocked:t,effects:r,color:c,height:n,scaleX:p,angle:i.gridAngle,offsetX:x(i.offsetX),offsetY:x(i.offsetY),applyRandomOffset:"Random"===i.gridType,sampleAlphaOnly:"CIMPictureMarker"!==e.type,hasUnresolvedReplacementColor:!0}),!0}_analyzePictureMarker(e,r,i,o,a,l,n,p,c,m,y,f,h,d){const{animatedSymbolProperties:u,primitiveName:v,type:O}=e;let _=x(e.scaleX,1);const g=z(e);i||(i=this._createMarkerPlacementOverrideExpression(e.markerPlacement));const S=this._createGIFAnimatedSymbolPropertiesOverrideExpression(u),M=e.anchorPoint??{x:0,y:0};if("width"in e&&"number"==typeof e.width){const r=e.width;let t=1;const i=this._resourceManager.getResource(e.url);null!=i&&(t=i.width/i.height);_/=t*(x(e.size)/r)}const k=[...o];let b;e.primitiveName&&k.push(e.primitiveName),u||S?b={type:"animated",url:e.url,urlHash:"H"+s(e.url),playAnimation:e.animatedSymbolProperties?.playAnimation,reverseAnimation:e.animatedSymbolProperties?.reverseAnimation,randomizeStartTime:e.animatedSymbolProperties?.randomizeStartTime,randomizeStartSeed:e.animatedSymbolProperties?.randomizeStartSeed,startTimeOffset:e.animatedSymbolProperties?.startTimeOffset,duration:e.animatedSymbolProperties?.duration,repeatType:e.animatedSymbolProperties?.repeatType,repeatDelay:e.animatedSymbolProperties?.repeatDelay}:(b=t(e),b.markerPlacement=null);const C={type:"sprite-rasterization-param",resource:b,overrides:this._getMaterialOverrides(k,O)};S&&C.overrides.push(...S.overrides);const P=n;this._cimLayers.push({type:"marker",spriteRasterizationParam:C,colorLocked:h,effects:r,scaleSymbolsProportionally:!1,alignment:a,size:n,scaleX:this._getValueOrOverrideExpression(O,v,"ScaleX",_),rotation:p,offsetX:c,offsetY:m,transform:{type:"cim-marker-transform-param",params:y},color:this._getValueOrOverrideExpression(O,v,"TintColor",g),anchorPoint:{x:M.x,y:M.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:[0,0,0,0],outlineWidth:0,frameHeight:0,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:1,isOutline:d,markerPlacement:i,animationParams:Z(f),baseSize:P})}_analyzeVectorMarker(e,r,t,i,o,a,s,l,p,c,m,d,u,v,O){const _=e.markerGraphics;if(!_)return;const g=e.frame;let S=0;S=g?g.ymax-g.ymin:a;const M=!!e.scaleSymbolsProportionally;if(S){const r={offsetX:p,offsetY:c,rotation:l,size:s,frameHeight:S,rotateClockWise:!!e.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:M};m=[...m,r]}t||(t=this._createMarkerPlacementOverrideExpression(e.markerPlacement));for(const k of _)if(k){const s=k.symbol;if(!s)continue;const l=k.primitiveName;l&&i.push(l);let p,c=d;if(("CIMPointSymbol"===s.type||"CIMTextSymbol"===s.type)&&g){let r=0,t=0;const i=k.geometry;"x"in i&&"y"in i&&(r+=i.x-.5*(g.xmin+g.xmax),t+=i.y-.5*(g.ymin+g.ymax));const o=e.anchorPoint;let a=!1;o&&("Absolute"===e.anchorPointUnits?(r-=o.x,t-=o.y,a=!0):g&&(r-=(g.xmax-g.xmin)*o.x,t-=(g.ymax-g.ymin)*o.y));const s={offsetX:r,offsetY:t,rotation:0,size:0,frameHeight:0,rotateClockWise:!1,absoluteAnchorPoint:a,scaleSymbolsProportionally:M};p=[...m,s]}const _=k.geometry,[b,C]=y(_,g);switch(0===b&&0===C||(c=f(c,b,C)),"CIMPointSymbol"===s.type&&(c=n(this._poMap,s,c)),s.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":u||K(s)?(c={...c,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!0,translation:h([0,0]),rotation:h(0),scale:h(S),parent:d.transform}},this._analyzeMultiLayerGraphicNonSDF(e,r,t,k,i,o,a,p??m,c,S,v,O)):this._analyzeMultiLayerGraphic(e,r,t,k,i,o,a,p??m,c,S,v,O);break;case"CIMTextSymbol":this._analyzeTextGraphic(r,t,k,i,o,a,p??m,v)}l&&i.pop()}}_analyzeMultiLayerGraphic(e,r,t,i,o,a,s,l,p,c,m,y){const f=i.symbol,h=f.symbolLayers;if(!h)return;let u=h.length;if(q(h)&&!d(p))return void this._analyzeCompositeMarkerGraphic(e,r,t,i,h,a,s,l,c,m,y);const O=this._resourceManager.geometryEngine,_=Y.applyEffects(f.effects,i.geometry,O);if(_)for(;u--;){const f=h[u];if(!f||!1===f.enable)continue;const d=f.primitiveName;switch(d&&o.push(d),f.type){case"CIMSolidFill":case"CIMSolidStroke":{const o=Y.applyEffects(f.effects,_,O),h=g(o);if(!h)continue;const u="Relative"!==e.anchorPointUnits,k=V(f)??0,{frameSizeRatio:C,anchorX:P,anchorY:z,widthRatio:L,sdfPaddingRatio:I}=S(h,e.frame,e.size,e.anchorPoint,u,k,e.scaleSymbolsProportionally),E="CIMSolidFill"===f.type,w={type:"sdf",geom:o,sdfPaddingRatio:I,asFill:E},{path:A}=f,G=E?b(N(f)):null==A?b(R(f)):[0,0,0,0],X=E?[0,0,0,0]:b(R(f));if(!E&&!k)break;const F=i.primitiveName;let T=null;E&&!f.colorLocked&&(T=this._maybeGetValueOrOverrideExpression(F,"FillColor"));let j=null;E||f.colorLocked||(j=this._maybeGetValueOrOverrideExpression(F,"StrokeColor"));const W=T??this._getValueOrOverrideExpression(f.type,d,"Color",G),D=j??this._getValueOrOverrideExpression(f.type,d,"Color",X),H=this._maybeGetValueOrOverrideExpression(F,"StrokeWidth")??this._getValueOrOverrideExpression(f.type,d,"Width",k),U=A?{type:"sprite-rasterization-param",resource:{type:"path",path:A,asFill:E},overrides:[]}:{type:"sprite-rasterization-param",resource:w,overrides:[]},J=n(this._poMap,f,p),B=x(e.size,v.CIMVectorMarker.size),q=this._getValueOrOverrideExpression(e.type,e.primitiveName,"Size",B);this._cimLayers.push({type:"marker",spriteRasterizationParam:U,colorLocked:!!f.colorLocked||!!m,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:P,y:z},isAbsoluteAnchorPoint:u,size:c,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:c,widthRatio:L,rotateClockwise:!1,referenceSize:s,sizeRatio:C,color:W,outlineColor:D,outlineWidth:H,isOutline:y,markerPlacement:t,animationParams:Z(J),isStroke:"CIMSolidFill"!==f.type,baseSize:q,...M(o,I)});break}case"CIMPictureMarker":case"CIMVectorMarker":f.markerPlacement?this._analyzeMultiLayerGraphicNonSDF(e,r,t,i,o,a,s,l,p,c,!!f.colorLocked||!!m,y):this._analyzeMarker(f,r,t,o,a,s,!1,l,p,m,y);break;default:this._analyzeMultiLayerGraphicNonSDF(e,r,t,i,o,a,s,l,p,c,!!f.colorLocked||!!m,y)}d&&o.pop()}}_analyzeTextGraphic(e,t,i,o,a,s,l,n){const p=[];_.findApplicableOverrides(i,this._primitiveOverrides,p);const c=i.geometry;if(!("x"in c)||!("y"in c))return;const m=i.symbol,y=w(m),f=A(m.fontStyleName),h=r(m.fontFamilyName);m.font={family:h,decoration:y,...f};const d=x(m.height,v.CIMTextSymbol.height),u=x(m.angle),O=x(m.offsetX),g=x(m.offsetY),{haloSymbol:S}=m,M=x(m.haloSize,0);let k=[0,0,0,0];if(S?.symbolLayers?.length){const e=S.symbolLayers;for(const r of e)if(r.color){k=this._getValueOrOverrideExpression(m?.haloSymbol?.type??"CIMPolygonSymbol",r.primitiveName,"Color",b(r.color));break}}const C=i.primitiveName;let P=[0,0,0,1],z=[0,0,0,0],L=0,I=!1;if(m.symbol?.symbolLayers)for(const r of m.symbol.symbolLayers){const e=r.primitiveName;if("CIMSolidStroke"===r.type)z=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Color",b(r.color)),L=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Width",V(r)??0);else if("CIMSolidFill"===r.type){const t=b(r.color);I=I??!!r.colorLocked,P=this._getValueOrOverrideExpression("CIMSolidFill",e??C,"Color",t)}}let E=null,N=null,R=null,F=null,T=null;C&&(E=this._maybeGetValueOrOverrideExpression(C,"TextSize"),N=this._maybeGetValueOrOverrideExpression(C,"TextAngle"),R=this._maybeGetValueOrOverrideExpression(C,"TextOffsetX"),F=this._maybeGetValueOrOverrideExpression(C,"TextOffsetY"),I||(T=this._maybeGetValueOrOverrideExpression(C,"FillColor")));const Y=T??P;let j=null,W=null,D=0;if(m.callout&&"CIMBackgroundCallout"===m.callout.type){const e=m.callout;if(e.backgroundSymbol){const r=e.backgroundSymbol.symbolLayers;if(r)for(const e of r)"CIMSolidFill"===e.type?j=b(e.color):"CIMSolidStroke"===e.type&&(W=b(e.color),D=x(e.width,v.CIMSolidStroke.width))}}const H=this._getValueOrOverrideExpression(m.type,i.primitiveName,"TextString",i.textString??"");if(null==H)return;const{fontStyleName:U}=m,J=h+(U?"-"+U.toLowerCase():"-regular"),B=this._getMaterialOverrides(o,m.type);B.push(...this._getPrimitiveMaterialOverrides(i.primitiveName,m.type));const q={type:"text-rasterization-param",resource:{type:"text",textString:i.textString??"",font:m.font,symbol:m,primitiveName:i.primitiveName},overrides:B};this._cimLayers.push({type:"text",lineWidth:m.lineWidth,textRasterizationParam:q,colorLocked:!!n||!!I,effects:e,alignment:a,anchorPoint:{x:0,y:0},isAbsoluteAnchorPoint:!1,fontName:J,decoration:y,haloSize:M,haloColor:k,weight:f.weight,style:f.style,size:E??d,angle:N??u,offsetX:R??O,offsetY:F??g,transform:{type:"cim-marker-transform-param",params:l},horizontalAlignment:G(m.horizontalAlignment),verticalAlignment:X(m.verticalAlignment),text:H,color:Y,outlineColor:z,outlineSize:L,backgroundColor:j,borderLineColor:W,borderLineWidth:D,referenceSize:s,sizeRatio:1,markerPlacement:t})}_analyzeMultiLayerGraphicNonSDF(e,r,t,i,a,s,l,n,p,c,m,y){const f=U(e,i),h=e.primitiveName,d=this._analyzeMaterialOverrides(h,["Rotation","OffsetX","OffsetY"]),O=L(d),[_,g,S]=u.getTextureAnchor(f,this._resourceManager),M=this._getMaterialOverrides(a,e.type);M.push(...O);const k={type:"sprite-rasterization-param",resource:{...f,avoidSDFRasterization:!0},overrides:M},b=x(e.size,v.CIMVectorMarker.size),C=this._getValueOrOverrideExpression(e.type,h,"Size",b);this._cimLayers.push({type:"marker",spriteRasterizationParam:k,colorLocked:m,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:s,anchorPoint:{x:_,y:g},isAbsoluteAnchorPoint:!1,size:c,rotation:0,offsetX:0,offsetY:0,transform:{type:"cim-marker-transform-param",params:n},color:[255,255,255,1],outlineColor:[0,0,0,0],outlineWidth:0,scaleX:1,frameHeight:c,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:S/o(e.size),isOutline:y,markerPlacement:t,animationParams:Z(p),baseSize:C})}_createMarkerPlacementOverrideExpression(e){if(!e)return null;const r=[];return _.findApplicableOverrides(e,this._primitiveOverrides,r),{type:"cim-marker-placement-param",placement:e,overrides:Q(r)}}_createGIFAnimatedSymbolPropertiesOverrideExpression(e){if(!e)return null;const r=[];return _.findApplicableOverrides(e,this._primitiveOverrides,r),{type:"cim-gif-animation-params",animation:e,overrides:Q(r)}}_analyzeCompositeMarkerGraphic(e,r,t,i,o,a,s,l,n,p,c){const m=i.geometry,y=o[0],f=o[1],h=g(m);if(!h)return;const d="Relative"!==e.anchorPointUnits,u=x(y.width,v.CIMSolidStroke.width),{frameSizeRatio:O,anchorX:_,anchorY:M,widthRatio:k,sdfPaddingRatio:C}=S(h,e.frame,e.size,e.anchorPoint,d,u,e.scaleSymbolsProportionally),{path:P}=f,z=f.primitiveName,L=y.primitiveName,I=i.primitiveName;let E=null;f.colorLocked||p||(E=this._maybeGetValueOrOverrideExpression(I,"FillColor"));const V=E??this._getValueOrOverrideExpression(f.type,z,"Color",b(f.color));let N=null;y.colorLocked||p||(N=this._maybeGetValueOrOverrideExpression(I,"StrokeColor"));const R=N??this._getValueOrOverrideExpression(y.type,L,"Color",b(y.color)),w=this._maybeGetValueOrOverrideExpression(I,"StrokeWidth")??this._getValueOrOverrideExpression(y.type,L,"Width",u),A={type:"sprite-rasterization-param",resource:P?{type:"path",path:P,asFill:!0}:{type:"sdf",geom:m,sdfPaddingRatio:C,asFill:!0},overrides:[]};this._cimLayers.push({type:"marker",spriteRasterizationParam:A,colorLocked:p,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:_,y:M},isAbsoluteAnchorPoint:d,size:n,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:n,widthRatio:k,rotateClockwise:!1,referenceSize:s,sizeRatio:O,color:V,outlineColor:R,outlineWidth:w,isOutline:c,markerPlacement:t})}_setPoMap(e,r,t){let i;this._poMap[e]?i=this._poMap[e]:(i={},this._poMap[e]=i),i[r]=t}_maybeGetValueOrOverrideExpression(e,r,t){return this._getValueOrOverrideExpression("",e,r,t,!1)}_getValueOrOverrideExpression(e,r,t,i,o=!0){if(o&&!F(i)&&(i=I(e,t.toLowerCase())),null==r)return i;const a=this._poMap[r];if(null==a)return i;const s=a[t];return"string"==typeof s||"number"==typeof s||Array.isArray(s)?s:s?{valueExpressionInfo:s,defaultValue:i}:i}_analyzePrimitiveOverrides(e,r,t,i){if(null==e)return!1;"string"==typeof e&&(e=[e]);for(const o of this._primitiveOverrides)if(e.includes(o.primitiveName)&&o.valueExpressionInfo)return!0;if(null!=r)for(const o of r)if(o?.overrides.length>0)return!0;if(null!=t)for(const o of t)if(o?.overrides.length>0)return!0;if(null!=i)for(const o of i)if(o?.overrides.length>0)return!0;return!1}_getMaterialOverrides(e,r){if(!e)return[];const t=[];for(const i of e)t.push(...this._getPrimitiveMaterialOverrides(i,r));return t}_getPrimitiveMaterialOverrides(e,r){if(!e)return[];const t=L(this._primitiveOverrides.filter((r=>r.primitiveName===e)));return t.forEach((e=>e.defaultValue=I(r,e.propertyName.toLowerCase()))),t}_analyzeMaterialOverrides(e,r){return this._primitiveOverrides.filter((t=>t.primitiveName!==e||!r.includes(t.propertyName)))}}function U(e,r){return{type:e.type,enable:!0,name:e.name,colorLocked:e.colorLocked,primitiveName:e.primitiveName,anchorPoint:e.anchorPoint,anchorPointUnits:e.anchorPointUnits,offsetX:0,offsetY:0,rotateClockwise:e.rotateClockwise,rotation:0,size:e.size,billboardMode3D:e.billboardMode3D,depth3D:e.depth3D,frame:e.frame,markerGraphics:[r],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function J(e){if(e&&0===e.indexOf("Level_")){const r=parseInt(e.slice(6),10);if(!isNaN(r))return r}return 0}function B(e,r){if(!r||0===r.length)return e;const i=t(e);return _.applyOverrides(i,r),i}const q=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&null==e[0].path&&null==e[1].path&&!e[0].effects&&!e[1].effects&&!e[0].animations&&!e[1].animations;function K(e){const r=e.symbolLayers;if(!r)return!1;const t=r.find((e=>e.effects?.find((e=>"CIMGeometricEffectDashes"===e.type&&null!=e.dashTemplate)))),i=r.find((e=>e.effects?.find((e=>"CIMGeometricEffectAddControlPoints"===e.type))));return!!t||!!i}function Q(e){return t(e).map((e=>({...e,propertyName:T(e.propertyName)})))}function Z(e){return d(e)?{type:"animation-params",params:e}:null}export{H as CIMAnalyzer,B as analyzeCIMResource};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.31/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{setSingleImageTextures as t,setCoordsAndTransforms as r}from"./utils.js";const a={vsPath:"raster/rfx/vs",fsPath:"raster/rfx/bandarithmetic",attributes:new Map([["a_position",0],["a_texcoord",1]])};function e(t,r){const{painter:e,rasterFunction:n}=t,{indexType:s,isOutputRounded:o}=n.parameters,i=[s];return o&&i.push("roundOutput"),e.materialManager.getProgram(a,i)}function n(a,e,n){t(a,e,n),r(e);const{bandIndexMat3:s}=a.rasterFunction.parameters;e.setUniformMatrix3fv("u_bandIndexMat3",s)}const s={createProgram:e,bindTextureAndUniforms:n};export{s as default};
|
|
5
|
+
import{setSingleImageTextures as t,setCoordsAndTransforms as r}from"./utils.js";const a={vsPath:"raster/rfx/vs",fsPath:"raster/rfx/bandarithmetic",attributes:new Map([["a_position",0],["a_texcoord",1]])};function e(t,r){const{painter:e,rasterFunction:n}=t,{indexType:s,isOutputRounded:o}=n.parameters,i=[s];return o&&i.push("roundOutput"),e.materialManager.getProgram(a,i)}function n(a,e,n){t(a,e,n),r(e);const{bandIndexMat3:s,adjustments:o}=a.rasterFunction.parameters;e.setUniformMatrix3fv("u_bandIndexMat3",s),e.setUniform1fv("u_adjustments",o)}const s={createProgram:e,bindTextureAndUniforms:n};export{s as default};
|