@arcgis/core 4.24.0-next.20220511 → 4.24.0-next.20220512
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/components/assets/icon/compactness16.json +1 -0
- package/assets/components/assets/icon/compactness24.json +1 -0
- package/assets/components/assets/icon/compactness32.json +1 -0
- package/assets/components/assets/icon/configure16.json +1 -0
- package/assets/components/assets/icon/configure24.json +1 -0
- package/assets/components/assets/icon/configure32.json +1 -0
- package/assets/components/assets/icon/debugScript16.json +1 -0
- package/assets/components/assets/icon/debugScript24.json +1 -0
- package/assets/components/assets/icon/debugScript32.json +1 -0
- package/assets/components/assets/icon/dissolveFeatures16.json +1 -0
- package/assets/components/assets/icon/dissolveFeatures24.json +1 -0
- package/assets/components/assets/icon/dissolveFeatures32.json +1 -0
- package/assets/components/assets/icon/distanceType16.json +1 -0
- package/assets/components/assets/icon/distanceType24.json +1 -0
- package/assets/components/assets/icon/distanceType32.json +1 -0
- package/assets/components/assets/icon/gridDiamond16.json +1 -0
- package/assets/components/assets/icon/gridDiamond24.json +1 -0
- package/assets/components/assets/icon/gridDiamond32.json +1 -0
- package/assets/components/assets/icon/gridHexagon16.json +1 -0
- package/assets/components/assets/icon/gridHexagon24.json +1 -0
- package/assets/components/assets/icon/gridHexagon32.json +1 -0
- package/assets/components/assets/icon/gridTriangle16.json +1 -0
- package/assets/components/assets/icon/gridTriangle24.json +1 -0
- package/assets/components/assets/icon/gridTriangle32.json +1 -0
- package/assets/components/assets/icon/insets16.json +1 -0
- package/assets/components/assets/icon/insets24.json +1 -0
- package/assets/components/assets/icon/insets32.json +1 -0
- package/assets/components/assets/icon/maximumTerritoryDistance16.json +1 -0
- package/assets/components/assets/icon/maximumTerritoryDistance24.json +1 -0
- package/assets/components/assets/icon/maximumTerritoryDistance32.json +1 -0
- package/assets/components/assets/icon/minDistanceBetweenCenters16.json +1 -0
- package/assets/components/assets/icon/minDistanceBetweenCenters24.json +1 -0
- package/assets/components/assets/icon/minDistanceBetweenCenters32.json +1 -0
- package/assets/components/assets/icon/numberOfTerritories16.json +1 -0
- package/assets/components/assets/icon/numberOfTerritories24.json +1 -0
- package/assets/components/assets/icon/numberOfTerritories32.json +1 -0
- package/assets/components/assets/icon/overlapFeatures16.json +1 -0
- package/assets/components/assets/icon/overlapFeatures24.json +1 -0
- package/assets/components/assets/icon/overlapFeatures32.json +1 -0
- package/assets/components/assets/icon/profileVariables16.json +1 -0
- package/assets/components/assets/icon/profileVariables24.json +1 -0
- package/assets/components/assets/icon/profileVariables32.json +1 -0
- package/assets/components/assets/icon/rasterAnalysis16.json +1 -0
- package/assets/components/assets/icon/rasterAnalysis24.json +1 -0
- package/assets/components/assets/icon/rasterAnalysis32.json +1 -0
- package/assets/components/assets/icon/recurrence16.json +1 -0
- package/assets/components/assets/icon/recurrence24.json +1 -0
- package/assets/components/assets/icon/recurrence32.json +1 -0
- package/assets/components/assets/icon/splitFeatures16.json +1 -0
- package/assets/components/assets/icon/splitFeatures24.json +1 -0
- package/assets/components/assets/icon/splitFeatures32.json +1 -0
- package/assets/components/assets/icon/territoryBufferDistance16.json +1 -0
- package/assets/components/assets/icon/territoryBufferDistance24.json +1 -0
- package/assets/components/assets/icon/territoryBufferDistance32.json +1 -0
- package/assets/components/assets/icon/testData16.json +1 -0
- package/assets/components/assets/icon/testData24.json +1 -0
- package/assets/components/assets/icon/testData32.json +1 -0
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/07eda3e958d29f86b37e.js +1 -0
- package/assets/esri/core/workers/chunks/0ecaa28b8bff1d779d66.js +1 -0
- package/assets/esri/core/workers/chunks/{adae54f116f311d72d97.js → 1aba8c73c62a64e0658c.js} +1 -1
- package/assets/esri/core/workers/chunks/1d109cd048170e2d529a.js +1 -0
- package/assets/esri/core/workers/chunks/366e5c1abd1ab6d3e548.js +1 -0
- package/assets/esri/core/workers/chunks/3e94e35f44aadbb332ff.js +1 -0
- package/assets/esri/core/workers/chunks/46411f32b29a0e783105.js +1 -0
- package/assets/esri/core/workers/chunks/4d1c87e3e0a02efcc082.js +1 -0
- package/assets/esri/core/workers/chunks/{b089058b64db3912478f.js → 5e46e60fab93ad034d3a.js} +1 -1
- package/assets/esri/core/workers/chunks/6281b15009712a5dee3c.js +1 -0
- package/assets/esri/core/workers/chunks/66f627d68dbb0fdb725f.js +1 -0
- package/assets/esri/core/workers/chunks/672da24bbf86718bf48d.js +1 -0
- package/assets/esri/core/workers/chunks/733625d85602127d62cd.js +1 -0
- package/assets/esri/core/workers/chunks/{c51c9b5da855f84b9a48.js → 7391422fc51acb96a25d.js} +1 -1
- package/assets/esri/core/workers/chunks/{f435dc615fdc8917f6ca.js → 7cf3cff7b28ff007dbad.js} +1 -1
- package/assets/esri/core/workers/chunks/7ea06c86adfc827fda08.js +1 -0
- package/assets/esri/core/workers/chunks/{a054a52712a118c6d505.js → 82bc24bdc9c6ebaf58c0.js} +1 -1
- package/assets/esri/core/workers/chunks/8965ab74e03506e3475e.js +1 -0
- package/assets/esri/core/workers/chunks/{5405f478af3563580926.js → 8b497d9c37a8f577a467.js} +1 -1
- package/assets/esri/core/workers/chunks/919d0d8b1c2176760973.js +1 -0
- package/assets/esri/core/workers/chunks/ab2a0480dc2b608deda3.js +1 -0
- package/assets/esri/core/workers/chunks/ab97a35f7a7d5cf1da19.js +2 -0
- package/assets/esri/core/workers/chunks/{dcd0653191cd4a1ccaae.js.LICENSE.txt → ab97a35f7a7d5cf1da19.js.LICENSE.txt} +1 -1
- package/assets/esri/core/workers/chunks/ae554c88e862a5761f2e.js +1 -0
- package/assets/esri/core/workers/chunks/ae5ce55cd1a32525f101.js +1 -0
- package/assets/esri/core/workers/chunks/b597c04a4abb98e29d1c.js +1 -0
- package/assets/esri/core/workers/chunks/{287c484fd40eee643f3a.js → b78c3e9d31c4a562cdf0.js} +1 -1
- package/assets/esri/core/workers/chunks/be4bf1e4cbe2a593f8b3.js +1 -0
- package/assets/esri/core/workers/chunks/{b7572b0921b23aef8b9d.js → c40d9caf5189be2c698e.js} +1 -1
- package/assets/esri/core/workers/chunks/{b28539c5a6bedb71b038.js → d63f736b3560c577a8a4.js} +1 -1
- package/assets/esri/core/workers/chunks/d869dabe937d3b60504e.js +1 -0
- package/assets/esri/core/workers/chunks/dd6c9a114ad38cf622ba.js +1 -0
- package/assets/esri/core/workers/chunks/e6b0f74226b9394bfa7a.js +1 -0
- package/assets/esri/themes/base/widgets/_Editor.scss +3 -2
- package/assets/esri/themes/dark/main.css +1 -1
- package/assets/esri/themes/light/main.css +1 -1
- package/assets/esri/themes/light/view.css +1 -1
- package/assets/esri/views/interactive/tooltip/t9n/Tooltip.json +1 -0
- package/assets/esri/views/interactive/tooltip/t9n/Tooltip_en.json +1 -0
- package/chunks/EdgeShader.glsl.js +3 -4
- package/interfaces.d.ts +463 -30
- package/layers/FeatureLayer.js +1 -1
- package/layers/GeoJSONLayer.js +1 -1
- package/layers/OGCFeatureLayer.js +1 -1
- package/layers/RouteLayer.js +1 -1
- package/layers/SceneLayer.js +1 -1
- package/layers/StreamLayer.js +1 -1
- package/layers/SubtypeGroupLayer.js +1 -1
- package/layers/WFSLayer.js +1 -1
- package/layers/buildingSublayers/BuildingComponentSublayer.js +1 -1
- package/layers/mixins/ArcGISImageService.js +1 -1
- package/layers/save/featureLayerUtils.js +1 -1
- package/layers/support/AggregateField.d.ts +4 -0
- package/layers/support/AggregateField.js +1 -1
- package/layers/support/FeatureReductionBinning.d.ts +4 -0
- package/layers/support/FeatureReductionBinning.js +1 -1
- package/layers/support/OutStatistic.d.ts +4 -0
- package/layers/support/Sublayer.js +1 -1
- package/layers/support/SubtypeSublayer.js +1 -1
- package/layers/support/rasterDatasets/ImageServerRaster.js +1 -1
- package/layers/support/rasterDatasets/wcsCoverageParser.js +1 -1
- package/layers/support/rasterFormats/TiffDecoder.js +1 -1
- package/package.json +3 -3
- package/portal/support/portalItemUtils.js +1 -1
- package/renderers/PieChartRenderer.d.ts +4 -0
- package/renderers/PieChartRenderer.js +5 -0
- package/renderers/Renderer.js +1 -1
- package/renderers/support/AuthoringInfo.js +1 -1
- package/renderers/support/RasterSymbolizer.js +1 -1
- package/renderers/support/clickToleranceUtils.js +1 -1
- package/renderers/support/rasterRendererHelper.js +1 -1
- package/renderers/support/types.js +1 -1
- package/renderers/support/utils.js +1 -1
- package/renderers.js +1 -1
- package/request.js +1 -1
- package/rest/imageService/fetchRasterInfo.js +5 -0
- package/rest/imageService/getCatalogItemRasterInfo.js +5 -0
- package/rest/print.js +1 -1
- package/smartMapping/renderers/color.js +1 -1
- package/smartMapping/renderers/dotDensity.js +1 -1
- package/smartMapping/renderers/heatmap.js +1 -1
- package/smartMapping/renderers/location.js +1 -1
- package/smartMapping/renderers/size.js +1 -1
- package/smartMapping/renderers/type.js +1 -1
- package/support/arcadeUtils.js +1 -1
- package/support/revision.js +1 -1
- package/symbols/cim/CIMSymbolHelper.js +1 -1
- package/symbols/cim/CurveHelper.js +1 -1
- package/symbols/cim/ExpandedCIM.js +1 -1
- package/symbols/cim/cimAnalyzer.js +1 -1
- package/symbols/cim/placements/PlacementInsidePolygon.js +1 -1
- package/views/2d/engine/brushes.js +1 -1
- package/views/2d/engine/vectorTiles/GlyphSource.js +1 -1
- package/views/2d/engine/vectorTiles/style/Filter.js +1 -1
- package/views/2d/engine/vectorTiles/style/StyleRepository.js +1 -1
- package/views/2d/engine/webgl/AttributeStoreView.js +1 -1
- package/views/2d/engine/webgl/Painter.js +1 -1
- package/views/2d/engine/webgl/Utils.js +1 -1
- package/views/2d/engine/webgl/brushes/WGLBrushPieChart.js +5 -0
- package/views/2d/engine/webgl/brushes/WGLGeometryBrush.js +1 -1
- package/views/2d/engine/webgl/brushes/WGLGeometryBrushFill.js +1 -1
- package/views/2d/engine/webgl/brushes/WGLGeometryBrushMarker.js +1 -1
- package/views/2d/engine/webgl/color.js +1 -1
- package/views/2d/engine/webgl/definitions.js +1 -1
- package/views/2d/engine/webgl/enums.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLBaseFillTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLBaseLineTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLDynamicFillTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLFillTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLMarkerTemplate.js +1 -1
- package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
- package/views/2d/engine/webgl/techniques/dotDensity/TechniqueDotDensity.js +1 -1
- package/views/2d/engine/webgl/techniques/pieChart/TechniquePieChart.js +5 -0
- package/views/2d/engine/webgl/techniques/utils.js +1 -1
- package/views/2d/engine/webgl/util/Matcher.js +1 -1
- package/views/2d/layers/features/schemaUtils.js +1 -1
- package/views/2d/layers/features/support/AttributeStore.js +1 -1
- package/views/2d/layers/features/tileRenderers/SymbolTileRenderer.js +1 -1
- package/views/2d/layers/features/tileRenderers/support/WGLFeatureView.js +1 -1
- package/views/2d/layers/imagery/ImageryTileView2D.js +1 -1
- package/views/3d/analysis/Dimensioning/DimensioningTool.js +1 -1
- package/views/3d/analysis/Dimensioning/LengthDimensionVisualization.js +1 -1
- package/views/3d/environment/SnowyWeather.d.ts +4 -0
- package/views/3d/layers/I3SMeshView3D.js +1 -1
- package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
- package/views/3d/terrain/TerrainRenderer.js +1 -1
- package/views/3d/terrain/TerrainSurface.js +1 -1
- package/views/3d/terrain/TileRenderer.js +1 -1
- package/views/3d/webgl-engine/collections/Component/ComponentObjectCollection.js +1 -1
- package/views/3d/webgl-engine/collections/Component/Material/shader/ComponentData.glsl.js +5 -5
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeRenderer.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeShaderTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeView.js +1 -1
- package/views/3d/webgl-engine/shaders/sources/edgeRenderer/EdgeUtil.glsl.js +37 -31
- package/views/draw/DrawOperation.js +1 -1
- package/views/interactive/snapping/FeatureSnappingEngine.js +1 -1
- package/views/interactive/snapping/SceneSnappingEngine.js +5 -0
- package/views/interactive/snapping/SnappingManager.js +1 -1
- package/views/interactive/snapping/snappingFactory.js +5 -0
- package/views/interactive/tooltip/content/TooltipContent.js +1 -1
- package/views/interactive/tooltip/content/TooltipContentDrawPoint.js +1 -1
- package/views/interactive/tooltip/content/TooltipContentDrawPolygon.js +1 -1
- package/views/interactive/tooltip/content/TooltipContentDrawPolyline.js +1 -1
- package/views/interactive/tooltip/content/TooltipContentTranslateVertex.js +1 -1
- package/widgets/Editor/workflowUtils.js +1 -1
- package/widgets/Editor.js +1 -1
- package/widgets/Popup/PopupViewModel.js +1 -1
- package/widgets/Popup/actionUtils.js +1 -1
- package/widgets/Sketch/SketchViewModel.js +1 -1
- package/assets/esri/core/workers/chunks/0564f1cfa3d17ff1aad3.js +0 -1
- package/assets/esri/core/workers/chunks/0806d5d706a864542bfb.js +0 -1
- package/assets/esri/core/workers/chunks/52478ee2d2a1354b6900.js +0 -1
- package/assets/esri/core/workers/chunks/5759af97f96f24c40105.js +0 -1
- package/assets/esri/core/workers/chunks/7bc828fbdd54c0b28aac.js +0 -1
- package/assets/esri/core/workers/chunks/875f26ee040f3d75c0db.js +0 -1
- package/assets/esri/core/workers/chunks/88384e7cafbfd2348598.js +0 -1
- package/assets/esri/core/workers/chunks/89acd5f888d6b8df4aad.js +0 -1
- package/assets/esri/core/workers/chunks/9d7533aaeac3b8d145c4.js +0 -1
- package/assets/esri/core/workers/chunks/a3bb600bfcb0282622f1.js +0 -1
- package/assets/esri/core/workers/chunks/b50ae3dc7e43ff452568.js +0 -1
- package/assets/esri/core/workers/chunks/b5b7bcbc19b3430903ee.js +0 -1
- package/assets/esri/core/workers/chunks/b758f3c419edc2306784.js +0 -1
- package/assets/esri/core/workers/chunks/cf47b605c31063e88357.js +0 -1
- package/assets/esri/core/workers/chunks/cfbb332d144e65a4a55d.js +0 -1
- package/assets/esri/core/workers/chunks/db937849b2c1af87b481.js +0 -1
- package/assets/esri/core/workers/chunks/dc3ed59f450283d97a19.js +0 -1
- package/assets/esri/core/workers/chunks/dcd0653191cd4a1ccaae.js +0 -2
- package/assets/esri/core/workers/chunks/dfb6a28039e5d5ce6fd4.js +0 -1
- package/assets/esri/core/workers/chunks/e4fdd1eaf987977d0a51.js +0 -1
- package/assets/esri/core/workers/chunks/f7e0bb11ba3677069c94.js +0 -1
- package/assets/esri/core/workers/chunks/f7f3dde4c8f9c687cc1e.js +0 -1
- package/assets/esri/core/workers/chunks/fc6beaf9466ea3898549.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.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../Color.js";import{bidiText as t}from"../../core/BidiText.js";import{packFloatRGBA as r}from"../../core/floatRGBA.js";import{clone as o}from"../../core/lang.js";import i from"../../core/Logger.js";import{nextPowerOfTwo as a}from"../../core/mathUtils.js";import{isSome as s,isNone as n}from"../../core/maybe.js";import{pt2px as l,px2pt as c}from"../../core/screenUtils.js";import{create as m,expandPointInPlace as f}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as y}from"../../geometry/support/boundsUtils.js";import{Placement as h}from"./CIMPlacements.js";import{lineGapType2LineHeight as p,horizontalAlignment2HAlign as S,verticalAlignment2VAlign as u,EnvDrawHelper as M,Transformation as d,CanvasDrawHelper as b}from"./CIMSymbolDrawHelper.js";import{LineCapStyle as g,LineJoinStyle as C,BlockProgression as I,FontEffects as k,FontEncoding as x,FontType as w,GlyphHinting as L,TextReadingDirection as P,VerticalGlyphOrientation as v,BillBoardMode as F,TextureFilter as T,ExtremityPlacement as z}from"./enums.js";import{getValue as D}from"./utils.js";import{C_INFINITY as G}from"../../views/2d/engine/vectorTiles/GeometryUtils.js";import{GLYPH_SIZE as A,MAGIC_LABEL_LINE_HEIGHT as N}from"../../views/2d/engine/webgl/definitions.js";import{shapeGlyphs as E}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";const O=Math.PI,R=O/2,j=4,V=10,B=96/72,X=Math.PI/180,Y=i.getLogger("esri.symbols.cim.CIMSymbolHelper");function U(e){if(!e||!e.type)return null;let t;switch(e.type){case"cim":return e.data;case"web-style":return e;case"simple-marker":t=J.fromSimpleMarker(e);break;case"picture-marker":t=J.fromPictureMarker(e);break;case"simple-line":t=J.fromSimpleLineSymbol(e);break;case"simple-fill":t=J.fromSimpleFillSymbol(e);break;case"picture-fill":t=J.fromPictureFillSymbol(e);break;case"text":t=J.fromTextSymbol(e)}return{type:"CIMSymbolReference",symbol:t}}function _(e,t){switch(t.type){case"CIMSymbolReference":return _(e,t.symbol);case"CIMPointSymbol":{const r={x:0,y:0};e.drawSymbol(t,r);break}case"CIMLineSymbol":{const r={paths:[[[0,0],[0,1]]]};e.drawSymbol(t,r);break}case"CIMPolygonSymbol":{const r={rings:[[[0,0],[0,1],[0,0]]]};e.drawSymbol(t,r);break}case"CIMTextSymbol":{const r={x:0,y:0};e.drawSymbol(t,r);break}case"CIMVectorMarker":{const r=new h;e.drawMarker(t,r);break}}return e.envelope()}function H(e){if(!e)return 0;switch(e.type){case"CIMMarkerPlacementAlongLineSameSize":case"CIMMarkerPlacementAlongLineRandomSize":case"CIMMarkerPlacementAtExtremities":case"CIMMarkerPlacementAtMeasuredUnits":case"CIMMarkerPlacementAtRatioPositions":case"CIMMarkerPlacementOnLine":case"CIMMarkerPlacementOnVertices":return Math.abs(e.offset);default:return 0}}function q(e){if(!e)return 0;switch(e.type){case"CIMGeometricEffectArrow":return Math.abs(.5*e.width);case"CIMGeometricEffectBuffer":return Math.abs(e.size);case"CIMGeometricEffectExtension":case"CIMGeometricEffectRadial":return Math.abs(e.length);case"CIMGeometricEffectJog":return Math.abs(.5*e.length);case"CIMGeometricEffectMove":return Math.max(Math.abs(D(e.offsetX)),Math.abs(D(e.offsetY)));case"CIMGeometricEffectOffset":case"CIMGeometricEffectOffsetTangent":return Math.abs(e.offset);case"CIMGeometricEffectRegularPolygon":return Math.abs(e.radius);case"CIMGeometricEffectRotate":case"CIMGeometricEffectScale":default:return 0;case"CIMGeometricEffectTaperedPolygon":return.5*Math.max(Math.abs(e.fromWidth),Math.abs(e.toWidth));case"CIMGeometricEffectWave":return Math.abs(e.amplitude)}}function W(e){if(!e)return 0;let t=0;for(const r of e)t+=q(r);return t}class ${getSymbolInflateSize(e,t,r,o,i){return e||(e=[0,0,0,0]),t?this._getInflateSize(e,t,r,o,i):e}static safeSize(e){const t=Math.max(Math.abs(e[0]),Math.abs(e[2])),r=Math.max(Math.abs(e[1]),Math.abs(e[3]));return Math.sqrt(t*t+r*r)}_vectorMarkerBounds(e,t,r,o){let i=!0;const a=m();if(t&&t.markerGraphics)for(const s of t.markerGraphics){const t=[0,0,0,0];s.geometry&&(y(a,s.geometry),t[0]=0,t[1]=0,t[2]=0,t[3]=0,this.getSymbolInflateSize(t,s.symbol,r,0,o),a[0]+=t[0],a[1]+=t[1],a[2]+=t[2],a[3]+=t[3],i?(e[0]=a[0],e[1]=a[1],e[2]=a[2],e[3]=a[3],i=!1):(e[0]=Math.min(e[0],a[0]),e[1]=Math.min(e[1],a[1]),e[2]=Math.max(e[2],a[2]),e[3]=Math.max(e[3],a[3])))}return e}_getInflateSize(e,t,r,o,i){if(le(t)){const a=this._getLayersInflateSize(e,t.symbolLayers,r,o,i),s=W(t.effects);return s>0&&(a[0]-=s,a[1]-=s,a[2]+=s,a[3]+=s),a}return this._getTextInflatedSize(e,t,i)}_getLayersInflateSize(e,t,r,o,i){let a=!0;if(!t)return e;for(const n of t){if(!n)continue;let t=[0,0,0,0];switch(n.type){case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":{const e=n;let r=e.width;e.capStyle===g.Square||e.joinStyle===C.Miter?r/=1.4142135623730951:r/=2,t[0]=-r,t[1]=-r,t[2]=r,t[3]=r;break}case"CIMCharacterMarker":case"CIMVectorMarker":case"CIMPictureMarker":{const e=n;if("CIMVectorMarker"===n.type){const e=n;if(t=this._vectorMarkerBounds(t,e,r,i),e.frame){const r=(e.frame.xmin+e.frame.xmax)/2,o=(e.frame.ymin+e.frame.ymax)/2;t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o;const i=e.size/(e.frame.ymax-e.frame.ymin);t[0]*=i,t[1]*=i,t[2]*=i,t[3]*=i}}else if("CIMPictureMarker"===n.type){const o=n,i=r.getResource(o.url);let a=1;s(i)&&i.height&&(a=i.width/i.height);const l=e.size/2,c=e.size*a*o.scaleX/2;t=[-c,-l,c,l]}else{const r=e.size/2;t=[-r,-r,r,r]}if(e.anchorPoint){let r,o;"Absolute"===e.anchorPointUnits?(r=e.anchorPoint.x,o=e.anchorPoint.y):(r=e.anchorPoint.x*(t[2]-t[0]),o=e.anchorPoint.y*(t[3]-t[1])),t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o}let a=D(e.rotation);if(e.rotateClockwise&&(a=-a),o&&(a-=o),a){const e=X*a,r=Math.cos(e),o=Math.sin(e),i=m([G,G,-G,-G]);f(i,[t[0]*r-t[1]*o,t[0]*o+t[1]*r]),f(i,[t[0]*r-t[3]*o,t[0]*o+t[3]*r]),f(i,[t[2]*r-t[1]*o,t[2]*o+t[1]*r]),f(i,[t[2]*r-t[3]*o,t[2]*o+t[3]*r]),t=i}let l=D(e.offsetX),c=D(e.offsetY);if(o){const e=X*o,t=Math.cos(e),r=Math.sin(e),i=l*r+c*t;l=l*t-c*r,c=i}t[0]+=l,t[1]+=c,t[2]+=l,t[3]+=c;const y=H(e.markerPlacement);y>0&&(t[0]-=y,t[1]-=y,t[2]+=y,t[3]+=y);break}}const l=W(n.effects);l>0&&(t[0]-=l,t[1]-=l,t[2]+=l,t[3]+=l),a?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],a=!1):(e[0]=Math.min(e[0],t[0]),e[1]=Math.min(e[1],t[1]),e[2]=Math.max(e[2],t[2]),e[3]=Math.max(e[3],t[3]))}return e}_getTextInflatedSize(e,r,o){const i=r.height??V;if(e[0]=-i/2,e[1]=-i/2,e[2]=i/2,e[3]=i/2,!o)return e;const a=o.get(r);if(!a)return e;const{text:s,mosaicItem:n}=a;if(!n||0===n.glyphMosaicItems.length)return e;const l=p(r.lineGapType,r.lineGap??0,i),c=t(s)[1],m=n.glyphMosaicItems,f=E(m,c,{scale:i/A,angle:D(r.angle),xOffset:D(r.offsetX),yOffset:D(r.offsetY),hAlign:S(r.horizontalAlignment),vAlign:u(r.verticalAlignment),maxLineWidth:512,lineHeight:N*Math.max(.25,Math.min(l||1,4)),decoration:r.font.decoration||"none",isCIM:!0}).boundsT;return e[0]=f.x-f.halfWidth,e[1]=-f.y-f.halfHeight,e[2]=f.x+f.halfWidth,e[3]=-f.y+f.halfHeight,e}}class J{static getEnvelope(e,t){const r=new M(t);if(Array.isArray(e)){let t;for(const o of e)t?t.union(_(r,o)):t=_(r,o);return t}return _(r,e)}static getTextureAnchor(e,t){const r=this.getEnvelope(e,t);if(!r)return[0,0,0];const o=(r.x+.5*r.width)*B,i=-(r.y+.5*r.height)*B,a=r.width*B+2,s=r.height*B+2;return[o/a,i/s,s]}static rasterize(e,t,r,o,i=!0){const a=r||this.getEnvelope(t,o);if(!a)return[null,0,0,0,0];const s=(a.x+.5*a.width)*B,n=(a.y+.5*a.height)*B;e.width=a.width*B,e.height=a.height*B,r||(e.width+=2,e.height+=2);const l=e.getContext("2d"),c=d.createScale(B,-B);c.translate(.5*e.width-s,.5*e.height+n);const m=new b(l,o,c);switch(t.type){case"CIMPointSymbol":{const e={type:"point",x:0,y:0};m.drawSymbol(t,e);break}case"CIMVectorMarker":{const e=new h;m.drawMarker(t,e);break}}const f=l.getImageData(0,0,e.width,e.height),y=new Uint8Array(f.data);if(i){let e;for(let t=0;t<y.length;t+=4)e=y[t+3]/255,y[t]=y[t]*e,y[t+1]=y[t+1]*e,y[t+2]=y[t+2]*e}return[y,e.width,e.height,-s/e.width,-n/e.height]}static fromTextSymbol(e){const{angle:r,color:o,font:i,haloColor:a,haloSize:s,horizontalAlignment:n,kerning:l,text:c,verticalAlignment:m,xoffset:f,yoffset:y}=e;let h,p,S,u,M;i&&(h=i.family,p=i.style,S=i.weight,u=i.size,M=i.decoration);let d=!1;if(c){d=t(c)[1]}return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,anchorPointUnits:"Relative",dominantSizeAxis3D:"Y",size:10,billboardMode3D:"FaceNearPlane",frame:{xmin:-5,ymin:-5,xmax:5,ymax:5},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{x:0,y:0},symbol:{type:"CIMTextSymbol",angle:r,blockProgression:I.BTT,depth3D:1,extrapolateBaselines:!0,fontEffects:k.Normal,fontEncoding:x.Unicode,fontFamilyName:h||"Arial",fontStyleName:ie(p,S),fontType:w.Unspecified,haloSize:s,height:u,hinting:L.Default,horizontalAlignment:te(n??"center"),kerning:l,letterWidth:100,ligatures:!0,lineGapType:"Multiple",offsetX:D(f),offsetY:D(y),strikethrough:"line-through"===M,underline:"underline"===M,symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:oe(o)}]},haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:oe(a)}]},shadowColor:[0,0,0,255],shadowOffsetX:1,shadowOffsetY:1,textCase:"Normal",textDirection:d?P.RTL:P.LTR,verticalAlignment:re(m??"baseline"),verticalGlyphOrientation:v.Right,wordSpacing:100,billboardMode3D:F.FaceNearPlane},textString:c}],scaleSymbolsProportionally:!0,respectFrame:!0}],scaleX:1,angleAlignment:"Display"}}static fromPictureFillSymbol(e){const{height:t,outline:r,width:o,xoffset:i,xscale:a,yoffset:s,yscale:n}=e,l=[],c={type:"CIMPolygonSymbol",symbolLayers:l};if(r){const{cap:e,join:t,miterLimit:o,width:i}=r;l.push({type:"CIMSolidStroke",color:oe(r.color),capStyle:Z(e),joinStyle:ee(t),miterLimit:o,width:i})}let m=e.url;"esriPFS"===e.type&&e.imageData&&(m=e.imageData);const f="angle"in e?e.angle:0,y=o*(a||1),h=t*(n||1);return l.push({type:"CIMPictureFill",invertBackfaceTexture:!1,scaleX:1,textureFilter:T.Picture,tintColor:null,url:m,height:h,width:y,offsetX:D(i),offsetY:D(s),rotation:D(-f),colorSubstitutions:null}),c}static fromSimpleFillSymbol(e){const{color:t,style:r,outline:i}=e,s=[],n={type:"CIMPolygonSymbol",symbolLayers:s};let l=null;if(i){const{cap:e,join:t,style:r}=i;"solid"!==r&&"none"!==r&&"esriSLSSolid"!==r&&"esriSLSNull"!==r&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:ne(r,e),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]),s.push({type:"CIMSolidStroke",color:oe(i.color),capStyle:Z(e),joinStyle:ee(t),miterLimit:i.miterLimit,width:i.width,effects:l})}if(r&&"solid"!==r&&"none"!==r&&"esriSFSSolid"!==r&&"esriSFSNull"!==r){const e={type:"CIMLineSymbol",symbolLayers:[{type:"CIMSolidStroke",color:oe(t),capStyle:g.Butt,joinStyle:C.Miter,width:.75}]};let i=0;const n=a(Math.ceil(window.devicePixelRatio)),l=me(r)?8*n:10*n;switch(r){case"vertical":case"esriSFSVertical":i=90;break;case"forward-diagonal":case"esriSFSForwardDiagonal":case"diagonal-cross":case"esriSFSDiagonalCross":i=-45;break;case"backward-diagonal":case"esriSFSBackwardDiagonal":i=45;break;case"cross":case"esriSFSCross":i=0}s.push({type:"CIMHatchFill",lineSymbol:e,offsetX:0,offsetY:0,rotation:i,separation:l}),"cross"===r||"esriSFSCross"===r?s.push({type:"CIMHatchFill",lineSymbol:o(e),offsetX:0,offsetY:0,rotation:90,separation:l}):"diagonal-cross"!==r&&"esriSFSDiagonalCross"!==r||s.push({type:"CIMHatchFill",lineSymbol:o(e),offsetX:0,offsetY:0,rotation:45,separation:l})}else!r||"solid"!==r&&"esriSFSSolid"!==r||s.push({type:"CIMSolidFill",enable:!0,color:oe(t)});return n}static fromSimpleLineSymbol(e){const{cap:t,color:r,join:o,marker:i,miterLimit:a,style:s,width:n}=e;let l=null;"solid"!==s&&"none"!==s&&"esriSLSSolid"!==s&&"esriSLSNull"!==s&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:ne(s,t),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]);const c=[];if(i){let e;switch(i.placement){case"begin-end":e=z.Both;break;case"begin":e=z.JustBegin;break;case"end":e=z.JustEnd;break;default:e=z.None}const t=J.fromSimpleMarker(i,n,r).symbolLayers[0];t.markerPlacement={type:"CIMMarkerPlacementAtExtremities",angleToLine:!0,offset:0,extremityPlacement:e,offsetAlongLine:0},c.push(t)}return"none"!==s&&"esriSLSNull"!==s&&c.push({type:"CIMSolidStroke",color:oe(r),capStyle:Z(t),joinStyle:ee(o),miterLimit:a,width:n,effects:l}),{type:"CIMLineSymbol",symbolLayers:c}}static fromPictureMarker(e){const{angle:t,height:r,width:o,xoffset:i,yoffset:a}=e;let s=e.url;return"esriPMS"===e.type&&e.imageData&&(s=e.imageData),{type:"CIMPointSymbol",symbolLayers:[{type:"CIMPictureMarker",invertBackfaceTexture:!1,scaleX:1,textureFilter:T.Picture,tintColor:null,url:s,size:r,width:o,offsetX:D(i),offsetY:D(a),rotation:D(-t)}]}}static fromSimpleMarker(e,t,r){const{style:o}=e,i=e.color??r;if("path"===o){const t=[];if("outline"in e&&e.outline){const r=e.outline;t.push({type:"CIMSolidStroke",enable:!0,width:l(Math.round(c(r.width))),color:oe(r.color)})}t.push({type:"CIMSolidFill",enable:!0,color:oe(i),path:e.path});const[r,o]=ce("square");return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:D(-e.angle),size:D(e.size||6),offsetX:D(e.xoffset),offsetY:D(e.yoffset),frame:r,markerGraphics:[{type:"CIMMarkerGraphic",geometry:o,symbol:{type:"CIMPolygonSymbol",symbolLayers:t}}]}]}}const[a,s]=ce(o);let n;if(s&&a){const r=[];if("outline"in e&&e.outline){const t=e.outline;r.push({type:"CIMSolidStroke",enable:!0,width:t.width>.667?l(Math.round(c(t.width))):t.width,color:oe(t.color)})}else!t||"line-marker"!==e.type||"cross"!==e.style&&"x"!==e.style||r.push({type:"CIMSolidStroke",enable:!0,width:t,color:oe(i)});r.push({type:"CIMSolidFill",enable:!0,color:oe(i)});const o={type:"CIMPolygonSymbol",symbolLayers:r};n={type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:D(-e.angle),size:D(e.size||6*t),offsetX:D(e.xoffset),offsetY:D(e.yoffset),frame:a,markerGraphics:[{type:"CIMMarkerGraphic",geometry:s,symbol:o}]}]}}return n}static fromCIMHatchFill(e,t){const r=e.separation??j,i=r/2,a=4;let s=e.lineSymbol;if(!t){s=o(e.lineSymbol);const t=s?.symbolLayers.find((e=>"CIMSolidStroke"===e.type));t&&(t.color=[255,255,255,255])}let n=this._getLineSymbolPeriod(e.lineSymbol)||a;for(;n<a;)n*=2;const l=n/2;return{type:"CIMVectorMarker",frame:{xmin:-l,xmax:l,ymin:-i,ymax:i},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{paths:[[[-l,0],[l,0]]]},symbol:s}],size:r}}static _getLineSymbolPeriod(e){if(e){const t=this._getEffectsRepeat(e.effects);if(t)return t;if(e.symbolLayers)for(const r of e.symbolLayers){const e=this._getEffectsRepeat(r.effects);if(e)return e;if(r){const e=this._getPlacementRepeat(r.markerPlacement);if(e)return e}}}return 0}static _getEffectsRepeat(e){if(e)for(const t of e)if(t)switch(t.type){case"CIMGeometricEffectDashes":{const e=t.dashTemplate;if(e&&e.length){let t=0;for(const r of e)t+=r;return 1&e.length&&(t*=2),t}break}case"CIMGeometricEffectWave":return t.period;default:Y.error(`unsupported geometric effect type ${t.type}`)}return 0}static _getPlacementRepeat(e){if(e)switch(e.type){case"CIMMarkerPlacementAlongLineSameSize":case"CIMMarkerPlacementAlongLineRandomSize":case"CIMMarkerPlacementAlongLineVariableSize":{const t=e.placementTemplate;if(t&&t.length){let e=0;for(const r of t)e+=r;return 1&t.length&&(e*=2),e}break}}return 0}static fromCIMInsidePolygon(e){const t=e.markerPlacement,r={type:e.type,...e};let o,i,a,s;if(r.markerPlacement=null,r.anchorPoint=null,!0===t.shiftOddRows){i=t.stepX/2,a=t.stepY,s=2*t.stepY;o=[{x:-i,y:0},{x:i,y:0},{x:0,y:a},{x:0,y:-a}].map((e=>({type:"CIMMarkerGraphic",geometry:e,symbol:{type:"CIMPointSymbol",symbolLayers:[r]}})))}else i=t.stepX/2,a=t.stepY/2,s=t.stepY,o=[{type:"CIMMarkerGraphic",geometry:{x:0,y:0},symbol:{type:"CIMPointSymbol",symbolLayers:[r]}}];return{type:"CIMVectorMarker",frame:{xmin:-i,xmax:i,ymin:-a,ymax:a},markerGraphics:o,size:s}}static getFillColor(e){if(!e)return null;switch(e.type){case"CIMPolygonSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=J.getFillColor(t);if(null!=e)return e}break;case"CIMTextSymbol":return J.getFillColor(e.symbol);case"CIMSolidFill":return e.color}}static getStrokeColor(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=J.getStrokeColor(t);if(void 0!==e)return e}break;case"CIMTextSymbol":return J.getStrokeColor(e.symbol);case"CIMSolidStroke":return e.color}}static getStrokeWidth(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=J.getStrokeWidth(t);if(void 0!==e)return e}break;case"CIMTextSymbol":return J.getStrokeWidth(e.symbol);case"CIMSolidStroke":case"CIMGradientStroke":case"CIMPictureStroke":return e.width}}static getSize(e){if(e)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{let t=0;if(e.symbolLayers)for(const r of e.symbolLayers){const e=J.getSize(r);e>t&&(t=e)}return t}case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":return e.width;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":return e.size}}static getMarkerScaleRatio(e){if(e&&"CIMVectorMarker"===e.type)if(!1!==e.scaleSymbolsProportionally&&e.frame){const t=e.frame.ymax-e.frame.ymin;return e.size/t}return 1}}class K{static rasterizeSimpleFill(e,t,r){"solid"!==t&&"none"!==t&&"esriSFSSolid"!==t&&"esriSFSNull"!==t||console.error("Unexpected: style does not require rasterization");const o=a(Math.ceil(r)),i=me(t)?8*o:16*o,s=2*o;e.width=i,e.height=i;const n=e.getContext("2d");n.strokeStyle="#FFFFFF",n.lineWidth=o,n.beginPath(),"vertical"!==t&&"cross"!==t&&"esriSFSCross"!==t&&"esriSFSVertical"!==t||(n.moveTo(i/2,-s),n.lineTo(i/2,i+s)),"horizontal"!==t&&"cross"!==t&&"esriSFSCross"!==t&&"esriSFSHorizontal"!==t||(n.moveTo(-s,i/2),n.lineTo(i+s,i/2)),"forward-diagonal"!==t&&"diagonal-cross"!==t&&"esriSFSDiagonalCross"!==t&&"esriSFSForwardDiagonal"!==t||(n.moveTo(-s,-s),n.lineTo(i+s,i+s),n.moveTo(i-s,-s),n.lineTo(i+s,s),n.moveTo(-s,i-s),n.lineTo(s,i+s)),"backward-diagonal"!==t&&"diagonal-cross"!==t&&"esriSFSBackwardDiagonal"!==t&&"esriSFSDiagonalCross"!==t||(n.moveTo(i+s,-s),n.lineTo(-s,i+s),n.moveTo(s,-s),n.lineTo(-s,s),n.moveTo(i+s,i-s),n.lineTo(i-s,i+s)),n.stroke();const l=n.getImageData(0,0,e.width,e.height),c=new Uint8Array(l.data);let m;for(let a=0;a<c.length;a+=4)m=c[a+3]/255,c[a]=c[a]*m,c[a+1]=c[a+1]*m,c[a+2]=c[a+2]*m;return[c,e.width,e.height]}static rasterizeSimpleLine(e,t){return this.rasterizeDash(e,t)}static rasterizeDash(e,t){const o="Butt"===t,i="Square"===t,a=!o&&!i;e.length%2==1&&(e=[...e,...e]);const s=15.5,n=2*s;let l=0;for(const r of e)l+=r;const c=Math.round(l*s),m=new Float32Array(c*n),f=.5*s;let y=0,h=0,p=.5,S=!0;for(const r of e){for(y=h,h+=r*s;p<=h;){let e=.5;for(;e<n;){const t=(e-.5)*c+p-.5,r=a?(e-s)*(e-s):Math.abs(e-s);m[t]=S?o?Math.max(Math.max(y+f-p,r),Math.max(p-h+f,r)):r:a?Math.min((p-y)*(p-y)+r,(p-h)*(p-h)+r):i?Math.min(Math.max(p-y,r),Math.max(h-p,r)):Math.min(Math.max(p-y+f,r),Math.max(h+f-p,r)),e++}p++}S=!S}const u=m.length,M=new Uint8Array(4*u);for(let d=0;d<u;++d){const e=(a?Math.sqrt(m[d]):m[d])/s;r(e,M,4*d)}return[M,c,n]}}class Q{static findApplicableOverrides(e,t,r){if(e&&t){if(e.primitiveName){let o=!1;for(const t of r)if(t.primitiveName===e.primitiveName){o=!0;break}if(!o)for(const i of t)i.primitiveName===e.primitiveName&&r.push(i)}switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":if(e.effects)for(const o of e.effects)Q.findApplicableOverrides(o,t,r);if(e.symbolLayers)for(const o of e.symbolLayers)Q.findApplicableOverrides(o,t,r);break;case"CIMTextSymbol":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":case"CIMVectorMarker":case"CIMCharacterMarker":case"CIMPictureMarker":if(e.effects)for(const o of e.effects)Q.findApplicableOverrides(o,t,r);if(e.markerPlacement&&Q.findApplicableOverrides(e.markerPlacement,t,r),"CIMVectorMarker"===e.type){if(e.markerGraphics)for(const o of e.markerGraphics)Q.findApplicableOverrides(o,t,r),Q.findApplicableOverrides(o.symbol,t,r)}else"CIMCharacterMarker"===e.type?Q.findApplicableOverrides(e.symbol,t,r):"CIMHatchFill"===e.type&&Q.findApplicableOverrides(e.lineSymbol,t,r)}}}static findEffectOverrides(e,t,r){if(!t||!e)return;const o=e.length;for(let i=0;i<o;i++){const o=e[i]?.primitiveName;if(o){let e=!1;for(const t of r)if(t.primitiveName===o){e=!0;break}if(!e)for(const i of t)i.primitiveName===o&&r.push(i)}}}static applyOverrides(e,t,r,o){if(!t)return;const i=e=>e?e.charAt(0).toLowerCase()+e.substr(1):e;if(e.primitiveName)for(const a of t)if(a.primitiveName===e.primitiveName){const t=i(a.propertyName);if(o&&o.push({cim:e,nocapPropertyName:t,value:e[t]}),a.expression&&(a.value=Q.toValue(a.propertyName,a.expression)),r){let t=!1;for(const o of r)o.primitiveName===e.primitiveName&&(t=!0);t||r.push(a)}e[t]=a.value}switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":if(e.effects)for(const i of e.effects)Q.applyOverrides(i,t,r,o);if(e.symbolLayers)for(const i of e.symbolLayers)Q.applyOverrides(i,t,r,o);break;case"CIMTextSymbol":break;case"CIMSolidStroke":case"CIMSolidFill":case"CIMVectorMarker":if(e.effects)for(const i of e.effects)Q.applyOverrides(i,t,r,o);if("CIMVectorMarker"===e.type&&e.markerGraphics)for(const i of e.markerGraphics)Q.applyOverrides(i,t,r,o),Q.applyOverrides(i.symbol,t,r,o)}}static restoreOverrides(e){for(const t of e)t.cim[t.nocapPropertyName]=t.value}static buildOverrideKey(e){let t="";for(const r of e)void 0!==r.value&&(t+=`${r.primitiveName}${r.propertyName}${JSON.stringify(r.value)}`);return t}static toValue(t,r){if("DashTemplate"===t)return r.split(" ").map((e=>Number(e)));if("Color"===t){const t=new e(r).toRgba();return t[3]*=255,t}return r}}const Z=e=>{if(!e)return g.Butt;switch(e){case"butt":return g.Butt;case"square":return g.Square;case"round":return g.Round}},ee=e=>{if(!e)return C.Miter;switch(e){case"miter":return C.Miter;case"round":return C.Round;case"bevel":return C.Bevel}},te=e=>{if(n(e))return"Center";switch(e){case"left":return"Left";case"right":return"Right";case"center":return"Center"}},re=e=>{if(n(e))return"Center";switch(e){case"baseline":return"Baseline";case"top":return"Top";case"middle":return"Center";case"bottom":return"Bottom"}},oe=e=>{if(!e)return[0,0,0,0];const{r:t,g:r,b:o,a:i}=e;return[t,r,o,255*i]},ie=(e,t)=>{const r=ae(t),o=se(e);return r&&o?`${r}-${o}`:`${r}${o}`},ae=e=>{if(!e)return"";switch(e.toLowerCase()){case"bold":case"bolder":return"bold"}return""},se=e=>{if(!e)return"";switch(e.toLowerCase()){case"italic":case"oblique":return"italic"}return""},ne=(e,t)=>{const r="butt"===t;switch(e){case"dash":case"esriSLSDash":return r?[4,3]:[3,4];case"dash-dot":case"esriSLSDashDot":return r?[4,3,1,3]:[3,4,0,4];case"dot":case"esriSLSDot":return r?[1,3]:[0,4];case"long-dash":case"esriSLSLongDash":return r?[8,3]:[7,4];case"long-dash-dot":case"esriSLSLongDashDot":return r?[8,3,1,3]:[7,4,0,4];case"long-dash-dot-dot":case"esriSLSDashDotDot":return r?[8,3,1,3,1,3]:[7,4,0,4,0,4];case"short-dash":case"esriSLSShortDash":return r?[4,1]:[3,2];case"short-dash-dot":case"esriSLSShortDashDot":return r?[4,1,1,1]:[3,2,0,2];case"short-dash-dot-dot":case"esriSLSShortDashDotDot":return r?[4,1,1,1,1,1]:[3,2,0,2,0,2];case"short-dot":case"esriSLSShortDot":return r?[1,1]:[0,2];case"solid":case"esriSLSSolid":case"none":return Y.error("Unexpected: style does not require rasterization"),[0,0];default:return Y.error(`Tried to rasterize SLS, but found an unexpected style: ${e}!`),[0,0]}};function le(e){return void 0!==e.symbolLayers}const ce=e=>{const t=100,r=50;let o,i;const a=e;if("circle"===a||"esriSMSCircle"===a){const e=.25;let t=Math.acos(1-e/r),a=Math.ceil(O/t/4);0===a&&(a=1),t=R/a,a*=4;const s=[];s.push([r,0]);for(let o=1;o<a;o++)s.push([r*Math.cos(o*t),-r*Math.sin(o*t)]);s.push([r,0]),o={rings:[s]},i={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("cross"===a||"esriSMSCross"===a){const e=0;o={rings:[[[e,r],[e,e],[r,e],[r,-e],[e,-e],[e,-r],[-e,-r],[-e,-e],[-r,-e],[-r,e],[-e,e],[-e,r],[e,r]]]},i={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("diamond"===a||"esriSMSDiamond"===a)o={rings:[[[-r,0],[0,r],[r,0],[0,-r],[-r,0]]]},i={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("square"===a||"esriSMSSquare"===a)o={rings:[[[-r,-r],[-r,r],[r,r],[r,-r],[-r,-r]]]},i={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("x"===a||"esriSMSX"===a){const e=0;o={rings:[[[0,e],[r-e,r],[r,r-e],[e,0],[r,e-r],[r-e,-r],[0,-e],[e-r,-r],[-r,e-r],[-e,0],[-r,r-e],[e-r,r],[0,e]]]},i={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("triangle"===a||"esriSMSTriangle"===a){const e=t*.5773502691896257,r=-e,a=2/3*t,s=a-t;o={rings:[[[r,s],[0,a],[e,s],[r,s]]]},i={xmin:r,ymin:s,xmax:e,ymax:a}}else"arrow"===a&&(o={rings:[[[-50,50],[50,0],[-50,-50],[-33,-20],[-33,20],[-50,50]]]},i={xmin:-r,ymin:-r,xmax:r,ymax:r});return[i,o]},me=e=>"vertical"===e||"horizontal"===e||"cross"===e||"esriSFSCross"===e||"esriSFSVertical"===e||"esriSFSHorizontal"===e;export{$ as CIMSimbolInflatedSizeHelper,J as CIMSymbolHelper,Q as OverrideHelper,K as SymbolHelper,ne as slsDashToTemplateArray,U as symbolToCIM};
|
|
5
|
+
import e from"../../Color.js";import{bidiText as t}from"../../core/BidiText.js";import{packFloatRGBA as r}from"../../core/floatRGBA.js";import{clone as o}from"../../core/lang.js";import i from"../../core/Logger.js";import{nextPowerOfTwo as a}from"../../core/mathUtils.js";import{isSome as s,isNone as n}from"../../core/maybe.js";import l from"../../core/RandomLCG.js";import{pt2px as c,px2pt as m}from"../../core/screenUtils.js";import{create as f,expandPointInPlace as y}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as h}from"../../geometry/support/boundsUtils.js";import{Placement as p}from"./CIMPlacements.js";import{lineGapType2LineHeight as u,horizontalAlignment2HAlign as M,verticalAlignment2VAlign as S,EnvDrawHelper as d,Transformation as b,CanvasDrawHelper as g}from"./CIMSymbolDrawHelper.js";import{LineCapStyle as C,LineJoinStyle as I,BlockProgression as k,FontEffects as x,FontEncoding as w,FontType as L,GlyphHinting as P,TextReadingDirection as v,VerticalGlyphOrientation as F,BillBoardMode as T,TextureFilter as z,ExtremityPlacement as D}from"./enums.js";import{getValue as G}from"./utils.js";import{C_INFINITY as A}from"../../views/2d/engine/vectorTiles/GeometryUtils.js";import{GLYPH_SIZE as N,MAGIC_LABEL_LINE_HEIGHT as E,RANDOM_INSIDE_POLYGON_TEXTURE_SIZE as O}from"../../views/2d/engine/webgl/definitions.js";import{shapeGlyphs as R}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";const j=Math.PI,V=j/2,B=4,X=10,U=96/72,_=Math.PI/180,H=i.getLogger("esri.symbols.cim.CIMSymbolHelper");function Y(e){if(!e||!e.type)return null;let t;switch(e.type){case"cim":return e.data;case"web-style":return e;case"simple-marker":t=Q.fromSimpleMarker(e);break;case"picture-marker":t=Q.fromPictureMarker(e);break;case"simple-line":t=Q.fromSimpleLineSymbol(e);break;case"simple-fill":t=Q.fromSimpleFillSymbol(e);break;case"picture-fill":t=Q.fromPictureFillSymbol(e);break;case"text":t=Q.fromTextSymbol(e)}return{type:"CIMSymbolReference",symbol:t}}function q(e,t){switch(t.type){case"CIMSymbolReference":return q(e,t.symbol);case"CIMPointSymbol":{const r={x:0,y:0};e.drawSymbol(t,r);break}case"CIMLineSymbol":{const r={paths:[[[0,0],[0,1]]]};e.drawSymbol(t,r);break}case"CIMPolygonSymbol":{const r={rings:[[[0,0],[0,1],[0,0]]]};e.drawSymbol(t,r);break}case"CIMTextSymbol":{const r={x:0,y:0};e.drawSymbol(t,r);break}case"CIMVectorMarker":{const r=new p;e.drawMarker(t,r);break}}return e.envelope()}function W(e){if(!e)return 0;switch(e.type){case"CIMMarkerPlacementAlongLineSameSize":case"CIMMarkerPlacementAlongLineRandomSize":case"CIMMarkerPlacementAtExtremities":case"CIMMarkerPlacementAtMeasuredUnits":case"CIMMarkerPlacementAtRatioPositions":case"CIMMarkerPlacementOnLine":case"CIMMarkerPlacementOnVertices":return Math.abs(e.offset);default:return 0}}function $(e){if(!e)return 0;switch(e.type){case"CIMGeometricEffectArrow":return Math.abs(.5*e.width);case"CIMGeometricEffectBuffer":return Math.abs(e.size);case"CIMGeometricEffectExtension":case"CIMGeometricEffectRadial":return Math.abs(e.length);case"CIMGeometricEffectJog":return Math.abs(.5*e.length);case"CIMGeometricEffectMove":return Math.max(Math.abs(G(e.offsetX)),Math.abs(G(e.offsetY)));case"CIMGeometricEffectOffset":case"CIMGeometricEffectOffsetTangent":return Math.abs(e.offset);case"CIMGeometricEffectRegularPolygon":return Math.abs(e.radius);case"CIMGeometricEffectRotate":case"CIMGeometricEffectScale":default:return 0;case"CIMGeometricEffectTaperedPolygon":return.5*Math.max(Math.abs(e.fromWidth),Math.abs(e.toWidth));case"CIMGeometricEffectWave":return Math.abs(e.amplitude)}}function J(e){if(!e)return 0;let t=0;for(const r of e)t+=$(r);return t}class K{getSymbolInflateSize(e,t,r,o,i){return e||(e=[0,0,0,0]),t?this._getInflateSize(e,t,r,o,i):e}static safeSize(e){const t=Math.max(Math.abs(e[0]),Math.abs(e[2])),r=Math.max(Math.abs(e[1]),Math.abs(e[3]));return Math.sqrt(t*t+r*r)}_vectorMarkerBounds(e,t,r,o){let i=!0;const a=f();if(t&&t.markerGraphics)for(const s of t.markerGraphics){const t=[0,0,0,0];s.geometry&&(h(a,s.geometry),t[0]=0,t[1]=0,t[2]=0,t[3]=0,this.getSymbolInflateSize(t,s.symbol,r,0,o),a[0]+=t[0],a[1]+=t[1],a[2]+=t[2],a[3]+=t[3],i?(e[0]=a[0],e[1]=a[1],e[2]=a[2],e[3]=a[3],i=!1):(e[0]=Math.min(e[0],a[0]),e[1]=Math.min(e[1],a[1]),e[2]=Math.max(e[2],a[2]),e[3]=Math.max(e[3],a[3])))}return e}_getInflateSize(e,t,r,o,i){if(me(t)){const a=this._getLayersInflateSize(e,t.symbolLayers,r,o,i),s=J(t.effects);return s>0&&(a[0]-=s,a[1]-=s,a[2]+=s,a[3]+=s),a}return this._getTextInflatedSize(e,t,i)}_getLayersInflateSize(e,t,r,o,i){let a=!0;if(!t)return e;for(const n of t){if(!n)continue;let t=[0,0,0,0];switch(n.type){case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":{const e=n;let r=e.width;e.capStyle===C.Square||e.joinStyle===I.Miter?r/=1.4142135623730951:r/=2,t[0]=-r,t[1]=-r,t[2]=r,t[3]=r;break}case"CIMCharacterMarker":case"CIMVectorMarker":case"CIMPictureMarker":{const e=n;if("CIMVectorMarker"===n.type){const e=n;if(t=this._vectorMarkerBounds(t,e,r,i),e.frame){const r=(e.frame.xmin+e.frame.xmax)/2,o=(e.frame.ymin+e.frame.ymax)/2;t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o;const i=e.size/(e.frame.ymax-e.frame.ymin);t[0]*=i,t[1]*=i,t[2]*=i,t[3]*=i}}else if("CIMPictureMarker"===n.type){const o=n,i=r.getResource(o.url);let a=1;s(i)&&i.height&&(a=i.width/i.height);const l=e.size/2,c=e.size*a*o.scaleX/2;t=[-c,-l,c,l]}else{const r=e.size/2;t=[-r,-r,r,r]}if(e.anchorPoint){let r,o;"Absolute"===e.anchorPointUnits?(r=e.anchorPoint.x,o=e.anchorPoint.y):(r=e.anchorPoint.x*(t[2]-t[0]),o=e.anchorPoint.y*(t[3]-t[1])),t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o}let a=G(e.rotation);if(e.rotateClockwise&&(a=-a),o&&(a-=o),a){const e=_*a,r=Math.cos(e),o=Math.sin(e),i=f([A,A,-A,-A]);y(i,[t[0]*r-t[1]*o,t[0]*o+t[1]*r]),y(i,[t[0]*r-t[3]*o,t[0]*o+t[3]*r]),y(i,[t[2]*r-t[1]*o,t[2]*o+t[1]*r]),y(i,[t[2]*r-t[3]*o,t[2]*o+t[3]*r]),t=i}let l=G(e.offsetX),c=G(e.offsetY);if(o){const e=_*o,t=Math.cos(e),r=Math.sin(e),i=l*r+c*t;l=l*t-c*r,c=i}t[0]+=l,t[1]+=c,t[2]+=l,t[3]+=c;const m=W(e.markerPlacement);m>0&&(t[0]-=m,t[1]-=m,t[2]+=m,t[3]+=m);break}}const l=J(n.effects);l>0&&(t[0]-=l,t[1]-=l,t[2]+=l,t[3]+=l),a?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],a=!1):(e[0]=Math.min(e[0],t[0]),e[1]=Math.min(e[1],t[1]),e[2]=Math.max(e[2],t[2]),e[3]=Math.max(e[3],t[3]))}return e}_getTextInflatedSize(e,r,o){const i=r.height??X;if(e[0]=-i/2,e[1]=-i/2,e[2]=i/2,e[3]=i/2,!o)return e;const a=o.get(r);if(!a)return e;const{text:s,mosaicItem:n}=a;if(!n||0===n.glyphMosaicItems.length)return e;const l=u(r.lineGapType,r.lineGap??0,i),c=t(s)[1],m=n.glyphMosaicItems,f=R(m,c,{scale:i/N,angle:G(r.angle),xOffset:G(r.offsetX),yOffset:G(r.offsetY),hAlign:M(r.horizontalAlignment),vAlign:S(r.verticalAlignment),maxLineWidth:512,lineHeight:E*Math.max(.25,Math.min(l||1,4)),decoration:r.font.decoration||"none",isCIM:!0}).boundsT;return e[0]=f.x-f.halfWidth,e[1]=-f.y-f.halfHeight,e[2]=f.x+f.halfWidth,e[3]=-f.y+f.halfHeight,e}}class Q{static getEnvelope(e,t){const r=new d(t);if(Array.isArray(e)){let t;for(const o of e)t?t.union(q(r,o)):t=q(r,o);return t}return q(r,e)}static getTextureAnchor(e,t){const r=this.getEnvelope(e,t);if(!r)return[0,0,0];const o=(r.x+.5*r.width)*U,i=-(r.y+.5*r.height)*U,a=r.width*U+2,s=r.height*U+2;return[o/a,i/s,s]}static rasterize(e,t,r,o,i=!0){const a=r||this.getEnvelope(t,o);if(!a)return[null,0,0,0,0];const s=(a.x+.5*a.width)*U,n=(a.y+.5*a.height)*U;e.width=a.width*U,e.height=a.height*U,r||(e.width+=2,e.height+=2);const l=e.getContext("2d"),c=b.createScale(U,-U);c.translate(.5*e.width-s,.5*e.height+n);const m=new g(l,o,c);switch(t.type){case"CIMPointSymbol":{const e={type:"point",x:0,y:0};m.drawSymbol(t,e);break}case"CIMVectorMarker":{const e=new p;m.drawMarker(t,e);break}}const f=l.getImageData(0,0,e.width,e.height),y=new Uint8Array(f.data);if(i){let e;for(let t=0;t<y.length;t+=4)e=y[t+3]/255,y[t]=y[t]*e,y[t+1]=y[t+1]*e,y[t+2]=y[t+2]*e}return[y,e.width,e.height,-s/e.width,-n/e.height]}static fromTextSymbol(e){const{angle:r,color:o,font:i,haloColor:a,haloSize:s,horizontalAlignment:n,kerning:l,text:c,verticalAlignment:m,xoffset:f,yoffset:y}=e;let h,p,u,M,S;i&&(h=i.family,p=i.style,u=i.weight,M=i.size,S=i.decoration);let d=!1;if(c){d=t(c)[1]}return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,anchorPointUnits:"Relative",dominantSizeAxis3D:"Y",size:10,billboardMode3D:"FaceNearPlane",frame:{xmin:-5,ymin:-5,xmax:5,ymax:5},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{x:0,y:0},symbol:{type:"CIMTextSymbol",angle:r,blockProgression:k.BTT,depth3D:1,extrapolateBaselines:!0,fontEffects:x.Normal,fontEncoding:w.Unicode,fontFamilyName:h||"Arial",fontStyleName:se(p,u),fontType:L.Unspecified,haloSize:s,height:M,hinting:P.Default,horizontalAlignment:oe(n??"center"),kerning:l,letterWidth:100,ligatures:!0,lineGapType:"Multiple",offsetX:G(f),offsetY:G(y),strikethrough:"line-through"===S,underline:"underline"===S,symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:ae(o)}]},haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:ae(a)}]},shadowColor:[0,0,0,255],shadowOffsetX:1,shadowOffsetY:1,textCase:"Normal",textDirection:d?v.RTL:v.LTR,verticalAlignment:ie(m??"baseline"),verticalGlyphOrientation:F.Right,wordSpacing:100,billboardMode3D:T.FaceNearPlane},textString:c}],scaleSymbolsProportionally:!0,respectFrame:!0}],scaleX:1,angleAlignment:"Display"}}static fromPictureFillSymbol(e){const{height:t,outline:r,width:o,xoffset:i,xscale:a,yoffset:s,yscale:n}=e,l=[],c={type:"CIMPolygonSymbol",symbolLayers:l};if(r){const{cap:e,join:t,miterLimit:o,width:i}=r;l.push({type:"CIMSolidStroke",color:ae(r.color),capStyle:te(e),joinStyle:re(t),miterLimit:o,width:i})}let m=e.url;"esriPFS"===e.type&&e.imageData&&(m=e.imageData);const f="angle"in e?e.angle:0,y=o*(a||1),h=t*(n||1);return l.push({type:"CIMPictureFill",invertBackfaceTexture:!1,scaleX:1,textureFilter:z.Picture,tintColor:null,url:m,height:h,width:y,offsetX:G(i),offsetY:G(s),rotation:G(-f),colorSubstitutions:null}),c}static fromSimpleFillSymbol(e){const{color:t,style:r,outline:i}=e,s=[],n={type:"CIMPolygonSymbol",symbolLayers:s};let l=null;if(i){const{cap:e,join:t,style:r}=i;"solid"!==r&&"none"!==r&&"esriSLSSolid"!==r&&"esriSLSNull"!==r&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:ce(r,e),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]),s.push({type:"CIMSolidStroke",color:ae(i.color),capStyle:te(e),joinStyle:re(t),miterLimit:i.miterLimit,width:i.width,effects:l})}if(r&&"solid"!==r&&"none"!==r&&"esriSFSSolid"!==r&&"esriSFSNull"!==r){const e={type:"CIMLineSymbol",symbolLayers:[{type:"CIMSolidStroke",color:ae(t),capStyle:C.Butt,joinStyle:I.Miter,width:.75}]};let i=0;const n=a(Math.ceil(window.devicePixelRatio)),l=ye(r)?8*n:10*n;switch(r){case"vertical":case"esriSFSVertical":i=90;break;case"forward-diagonal":case"esriSFSForwardDiagonal":case"diagonal-cross":case"esriSFSDiagonalCross":i=-45;break;case"backward-diagonal":case"esriSFSBackwardDiagonal":i=45;break;case"cross":case"esriSFSCross":i=0}s.push({type:"CIMHatchFill",lineSymbol:e,offsetX:0,offsetY:0,rotation:i,separation:l}),"cross"===r||"esriSFSCross"===r?s.push({type:"CIMHatchFill",lineSymbol:o(e),offsetX:0,offsetY:0,rotation:90,separation:l}):"diagonal-cross"!==r&&"esriSFSDiagonalCross"!==r||s.push({type:"CIMHatchFill",lineSymbol:o(e),offsetX:0,offsetY:0,rotation:45,separation:l})}else!r||"solid"!==r&&"esriSFSSolid"!==r||s.push({type:"CIMSolidFill",enable:!0,color:ae(t)});return n}static fromSimpleLineSymbol(e){const{cap:t,color:r,join:o,marker:i,miterLimit:a,style:s,width:n}=e;let l=null;"solid"!==s&&"none"!==s&&"esriSLSSolid"!==s&&"esriSLSNull"!==s&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:ce(s,t),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]);const c=[];if(i){let e;switch(i.placement){case"begin-end":e=D.Both;break;case"begin":e=D.JustBegin;break;case"end":e=D.JustEnd;break;default:e=D.None}const t=Q.fromSimpleMarker(i,n,r).symbolLayers[0];t.markerPlacement={type:"CIMMarkerPlacementAtExtremities",angleToLine:!0,offset:0,extremityPlacement:e,offsetAlongLine:0},c.push(t)}return"none"!==s&&"esriSLSNull"!==s&&c.push({type:"CIMSolidStroke",color:ae(r),capStyle:te(t),joinStyle:re(o),miterLimit:a,width:n,effects:l}),{type:"CIMLineSymbol",symbolLayers:c}}static fromPictureMarker(e){const{angle:t,height:r,width:o,xoffset:i,yoffset:a}=e;let s=e.url;return"esriPMS"===e.type&&e.imageData&&(s=e.imageData),{type:"CIMPointSymbol",symbolLayers:[{type:"CIMPictureMarker",invertBackfaceTexture:!1,scaleX:1,textureFilter:z.Picture,tintColor:null,url:s,size:r,width:o,offsetX:G(i),offsetY:G(a),rotation:G(-t)}]}}static fromSimpleMarker(e,t,r){const{style:o}=e,i=e.color??r;if("path"===o){const t=[];if("outline"in e&&e.outline){const r=e.outline;t.push({type:"CIMSolidStroke",enable:!0,width:c(Math.round(m(r.width))),color:ae(r.color)})}t.push({type:"CIMSolidFill",enable:!0,color:ae(i),path:e.path});const[r,o]=fe("square");return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:G(-e.angle),size:G(e.size||6),offsetX:G(e.xoffset),offsetY:G(e.yoffset),frame:r,markerGraphics:[{type:"CIMMarkerGraphic",geometry:o,symbol:{type:"CIMPolygonSymbol",symbolLayers:t}}]}]}}const[a,s]=fe(o);let n;if(s&&a){const r=[];if("outline"in e&&e.outline){const t=e.outline;r.push({type:"CIMSolidStroke",enable:!0,width:t.width>.667?c(Math.round(m(t.width))):t.width,color:ae(t.color)})}else!t||"line-marker"!==e.type||"cross"!==e.style&&"x"!==e.style||r.push({type:"CIMSolidStroke",enable:!0,width:t,color:ae(i)});r.push({type:"CIMSolidFill",enable:!0,color:ae(i)});const o={type:"CIMPolygonSymbol",symbolLayers:r};n={type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:G(-e.angle),size:G(e.size||6*t),offsetX:G(e.xoffset),offsetY:G(e.yoffset),frame:a,markerGraphics:[{type:"CIMMarkerGraphic",geometry:s,symbol:o}]}]}}return n}static fromCIMHatchFill(e,t){const r=e.separation??B,i=r/2,a=4;let s=e.lineSymbol;if(!t){s=o(e.lineSymbol);const t=s?.symbolLayers.find((e=>"CIMSolidStroke"===e.type));t&&(t.color=[255,255,255,255])}let n=this._getLineSymbolPeriod(e.lineSymbol)||a;for(;n<a;)n*=2;const l=n/2;return{type:"CIMVectorMarker",frame:{xmin:-l,xmax:l,ymin:-i,ymax:i},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{paths:[[[-l,0],[l,0]]]},symbol:s}],size:r}}static _getLineSymbolPeriod(e){if(e){const t=this._getEffectsRepeat(e.effects);if(t)return t;if(e.symbolLayers)for(const r of e.symbolLayers){const e=this._getEffectsRepeat(r.effects);if(e)return e;if(r){const e=this._getPlacementRepeat(r.markerPlacement);if(e)return e}}}return 0}static _getEffectsRepeat(e){if(e)for(const t of e)if(t)switch(t.type){case"CIMGeometricEffectDashes":{const e=t.dashTemplate;if(e&&e.length){let t=0;for(const r of e)t+=r;return 1&e.length&&(t*=2),t}break}case"CIMGeometricEffectWave":return t.period;default:H.error(`unsupported geometric effect type ${t.type}`)}return 0}static _getPlacementRepeat(e){if(e)switch(e.type){case"CIMMarkerPlacementAlongLineSameSize":case"CIMMarkerPlacementAlongLineRandomSize":case"CIMMarkerPlacementAlongLineVariableSize":{const t=e.placementTemplate;if(t&&t.length){let e=0;for(const r of t)e+=r;return 1&t.length&&(e*=2),e}break}}return 0}static fromCIMInsidePolygon(e){const t=e.markerPlacement,r={type:e.type,...e};r.markerPlacement=null,r.anchorPoint=null;const o=Math.abs(t.stepX),i=Math.abs(t.stepY),a=(t.randomness??100)/100;let s,n,c,f;if("Random"===t.gridType){const e=m(O),r=Math.max(Math.floor(e/o),1),y=Math.max(Math.floor(e/i),1);s=r*o/2,n=y*i/2,c=2*n;const h=new l(t.seed),p=a*o/1.5,u=a*i/1.5;f=[];for(let t=0;t<r;t++)for(let e=0;e<y;e++){const r=t*o-s+p*(.5-h.getFloat()),a=e*i-n+u*(.5-h.getFloat());f.push({x:r,y:a}),0===t&&f.push({x:r+2*s,y:a}),0===e&&f.push({x:r,y:a+2*n})}}else!0===t.shiftOddRows?(s=o/2,n=i,c=2*i,f=[{x:-s,y:0},{x:s,y:0},{x:0,y:n},{x:0,y:-n}]):(s=o/2,n=i/2,c=i,f=[{x:0,y:0}]);return{type:"CIMVectorMarker",frame:{xmin:-s,xmax:s,ymin:-n,ymax:n},markerGraphics:f.map((e=>({type:"CIMMarkerGraphic",geometry:e,symbol:{type:"CIMPointSymbol",symbolLayers:[r]}}))),size:c}}static getFillColor(e){if(!e)return null;switch(e.type){case"CIMPolygonSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=Q.getFillColor(t);if(null!=e)return e}break;case"CIMTextSymbol":return Q.getFillColor(e.symbol);case"CIMSolidFill":return e.color}}static getStrokeColor(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=Q.getStrokeColor(t);if(void 0!==e)return e}break;case"CIMTextSymbol":return Q.getStrokeColor(e.symbol);case"CIMSolidStroke":return e.color}}static getStrokeWidth(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=Q.getStrokeWidth(t);if(void 0!==e)return e}break;case"CIMTextSymbol":return Q.getStrokeWidth(e.symbol);case"CIMSolidStroke":case"CIMGradientStroke":case"CIMPictureStroke":return e.width}}static getSize(e){if(e)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{let t=0;if(e.symbolLayers)for(const r of e.symbolLayers){const e=Q.getSize(r);e>t&&(t=e)}return t}case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":return e.width;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":return e.size}}static getMarkerScaleRatio(e){if(e&&"CIMVectorMarker"===e.type)if(!1!==e.scaleSymbolsProportionally&&e.frame){const t=e.frame.ymax-e.frame.ymin;return e.size/t}return 1}}class Z{static rasterizeSimpleFill(e,t,r){"solid"!==t&&"none"!==t&&"esriSFSSolid"!==t&&"esriSFSNull"!==t||console.error("Unexpected: style does not require rasterization");const o=a(Math.ceil(r)),i=ye(t)?8*o:16*o,s=2*o;e.width=i,e.height=i;const n=e.getContext("2d");n.strokeStyle="#FFFFFF",n.lineWidth=o,n.beginPath(),"vertical"!==t&&"cross"!==t&&"esriSFSCross"!==t&&"esriSFSVertical"!==t||(n.moveTo(i/2,-s),n.lineTo(i/2,i+s)),"horizontal"!==t&&"cross"!==t&&"esriSFSCross"!==t&&"esriSFSHorizontal"!==t||(n.moveTo(-s,i/2),n.lineTo(i+s,i/2)),"forward-diagonal"!==t&&"diagonal-cross"!==t&&"esriSFSDiagonalCross"!==t&&"esriSFSForwardDiagonal"!==t||(n.moveTo(-s,-s),n.lineTo(i+s,i+s),n.moveTo(i-s,-s),n.lineTo(i+s,s),n.moveTo(-s,i-s),n.lineTo(s,i+s)),"backward-diagonal"!==t&&"diagonal-cross"!==t&&"esriSFSBackwardDiagonal"!==t&&"esriSFSDiagonalCross"!==t||(n.moveTo(i+s,-s),n.lineTo(-s,i+s),n.moveTo(s,-s),n.lineTo(-s,s),n.moveTo(i+s,i-s),n.lineTo(i-s,i+s)),n.stroke();const l=n.getImageData(0,0,e.width,e.height),c=new Uint8Array(l.data);let m;for(let a=0;a<c.length;a+=4)m=c[a+3]/255,c[a]=c[a]*m,c[a+1]=c[a+1]*m,c[a+2]=c[a+2]*m;return[c,e.width,e.height]}static rasterizeSimpleLine(e,t){return this.rasterizeDash(e,t)}static rasterizeDash(e,t){const o="Butt"===t,i="Square"===t,a=!o&&!i;e.length%2==1&&(e=[...e,...e]);const s=15.5,n=2*s;let l=0;for(const r of e)l+=r;const c=Math.round(l*s),m=new Float32Array(c*n),f=.5*s;let y=0,h=0,p=.5,u=!0;for(const r of e){for(y=h,h+=r*s;p<=h;){let e=.5;for(;e<n;){const t=(e-.5)*c+p-.5,r=a?(e-s)*(e-s):Math.abs(e-s);m[t]=u?o?Math.max(Math.max(y+f-p,r),Math.max(p-h+f,r)):r:a?Math.min((p-y)*(p-y)+r,(p-h)*(p-h)+r):i?Math.min(Math.max(p-y,r),Math.max(h-p,r)):Math.min(Math.max(p-y+f,r),Math.max(h+f-p,r)),e++}p++}u=!u}const M=m.length,S=new Uint8Array(4*M);for(let d=0;d<M;++d){const e=(a?Math.sqrt(m[d]):m[d])/s;r(e,S,4*d)}return[S,c,n]}}class ee{static findApplicableOverrides(e,t,r){if(e&&t){if(e.primitiveName){let o=!1;for(const t of r)if(t.primitiveName===e.primitiveName){o=!0;break}if(!o)for(const i of t)i.primitiveName===e.primitiveName&&r.push(i)}switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":if(e.effects)for(const o of e.effects)ee.findApplicableOverrides(o,t,r);if(e.symbolLayers)for(const o of e.symbolLayers)ee.findApplicableOverrides(o,t,r);break;case"CIMTextSymbol":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":case"CIMVectorMarker":case"CIMCharacterMarker":case"CIMPictureMarker":if(e.effects)for(const o of e.effects)ee.findApplicableOverrides(o,t,r);if(e.markerPlacement&&ee.findApplicableOverrides(e.markerPlacement,t,r),"CIMVectorMarker"===e.type){if(e.markerGraphics)for(const o of e.markerGraphics)ee.findApplicableOverrides(o,t,r),ee.findApplicableOverrides(o.symbol,t,r)}else"CIMCharacterMarker"===e.type?ee.findApplicableOverrides(e.symbol,t,r):"CIMHatchFill"===e.type&&ee.findApplicableOverrides(e.lineSymbol,t,r)}}}static findEffectOverrides(e,t,r){if(!t||!e)return;const o=e.length;for(let i=0;i<o;i++){const o=e[i]?.primitiveName;if(o){let e=!1;for(const t of r)if(t.primitiveName===o){e=!0;break}if(!e)for(const i of t)i.primitiveName===o&&r.push(i)}}}static applyOverrides(e,t,r,o){if(!t)return;const i=e=>e?e.charAt(0).toLowerCase()+e.substr(1):e;if(e.primitiveName)for(const a of t)if(a.primitiveName===e.primitiveName){const t=i(a.propertyName);if(o&&o.push({cim:e,nocapPropertyName:t,value:e[t]}),a.expression&&(a.value=ee.toValue(a.propertyName,a.expression)),r){let t=!1;for(const o of r)o.primitiveName===e.primitiveName&&(t=!0);t||r.push(a)}e[t]=a.value}switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":if(e.effects)for(const i of e.effects)ee.applyOverrides(i,t,r,o);if(e.symbolLayers)for(const i of e.symbolLayers)ee.applyOverrides(i,t,r,o);break;case"CIMTextSymbol":break;case"CIMSolidStroke":case"CIMSolidFill":case"CIMVectorMarker":if(e.effects)for(const i of e.effects)ee.applyOverrides(i,t,r,o);if("CIMVectorMarker"===e.type&&e.markerGraphics)for(const i of e.markerGraphics)ee.applyOverrides(i,t,r,o),ee.applyOverrides(i.symbol,t,r,o)}}static restoreOverrides(e){for(const t of e)t.cim[t.nocapPropertyName]=t.value}static buildOverrideKey(e){let t="";for(const r of e)void 0!==r.value&&(t+=`${r.primitiveName}${r.propertyName}${JSON.stringify(r.value)}`);return t}static toValue(t,r){if("DashTemplate"===t)return r.split(" ").map((e=>Number(e)));if("Color"===t){const t=new e(r).toRgba();return t[3]*=255,t}return r}}const te=e=>{if(!e)return C.Butt;switch(e){case"butt":return C.Butt;case"square":return C.Square;case"round":return C.Round}},re=e=>{if(!e)return I.Miter;switch(e){case"miter":return I.Miter;case"round":return I.Round;case"bevel":return I.Bevel}},oe=e=>{if(n(e))return"Center";switch(e){case"left":return"Left";case"right":return"Right";case"center":return"Center"}},ie=e=>{if(n(e))return"Center";switch(e){case"baseline":return"Baseline";case"top":return"Top";case"middle":return"Center";case"bottom":return"Bottom"}},ae=e=>{if(!e)return[0,0,0,0];const{r:t,g:r,b:o,a:i}=e;return[t,r,o,255*i]},se=(e,t)=>{const r=ne(t),o=le(e);return r&&o?`${r}-${o}`:`${r}${o}`},ne=e=>{if(!e)return"";switch(e.toLowerCase()){case"bold":case"bolder":return"bold"}return""},le=e=>{if(!e)return"";switch(e.toLowerCase()){case"italic":case"oblique":return"italic"}return""},ce=(e,t)=>{const r="butt"===t;switch(e){case"dash":case"esriSLSDash":return r?[4,3]:[3,4];case"dash-dot":case"esriSLSDashDot":return r?[4,3,1,3]:[3,4,0,4];case"dot":case"esriSLSDot":return r?[1,3]:[0,4];case"long-dash":case"esriSLSLongDash":return r?[8,3]:[7,4];case"long-dash-dot":case"esriSLSLongDashDot":return r?[8,3,1,3]:[7,4,0,4];case"long-dash-dot-dot":case"esriSLSDashDotDot":return r?[8,3,1,3,1,3]:[7,4,0,4,0,4];case"short-dash":case"esriSLSShortDash":return r?[4,1]:[3,2];case"short-dash-dot":case"esriSLSShortDashDot":return r?[4,1,1,1]:[3,2,0,2];case"short-dash-dot-dot":case"esriSLSShortDashDotDot":return r?[4,1,1,1,1,1]:[3,2,0,2,0,2];case"short-dot":case"esriSLSShortDot":return r?[1,1]:[0,2];case"solid":case"esriSLSSolid":case"none":return H.error("Unexpected: style does not require rasterization"),[0,0];default:return H.error(`Tried to rasterize SLS, but found an unexpected style: ${e}!`),[0,0]}};function me(e){return void 0!==e.symbolLayers}const fe=e=>{const t=100,r=50;let o,i;const a=e;if("circle"===a||"esriSMSCircle"===a){const e=.25;let t=Math.acos(1-e/r),a=Math.ceil(j/t/4);0===a&&(a=1),t=V/a,a*=4;const s=[];s.push([r,0]);for(let o=1;o<a;o++)s.push([r*Math.cos(o*t),-r*Math.sin(o*t)]);s.push([r,0]),o={rings:[s]},i={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("cross"===a||"esriSMSCross"===a){const e=0;o={rings:[[[e,r],[e,e],[r,e],[r,-e],[e,-e],[e,-r],[-e,-r],[-e,-e],[-r,-e],[-r,e],[-e,e],[-e,r],[e,r]]]},i={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("diamond"===a||"esriSMSDiamond"===a)o={rings:[[[-r,0],[0,r],[r,0],[0,-r],[-r,0]]]},i={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("square"===a||"esriSMSSquare"===a)o={rings:[[[-r,-r],[-r,r],[r,r],[r,-r],[-r,-r]]]},i={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("x"===a||"esriSMSX"===a){const e=0;o={rings:[[[0,e],[r-e,r],[r,r-e],[e,0],[r,e-r],[r-e,-r],[0,-e],[e-r,-r],[-r,e-r],[-e,0],[-r,r-e],[e-r,r],[0,e]]]},i={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("triangle"===a||"esriSMSTriangle"===a){const e=t*.5773502691896257,r=-e,a=2/3*t,s=a-t;o={rings:[[[r,s],[0,a],[e,s],[r,s]]]},i={xmin:r,ymin:s,xmax:e,ymax:a}}else"arrow"===a&&(o={rings:[[[-50,50],[50,0],[-50,-50],[-33,-20],[-33,20],[-50,50]]]},i={xmin:-r,ymin:-r,xmax:r,ymax:r});return[i,o]},ye=e=>"vertical"===e||"horizontal"===e||"cross"===e||"esriSFSCross"===e||"esriSFSVertical"===e||"esriSFSHorizontal"===e;export{K as CIMSimbolInflatedSizeHelper,Q as CIMSymbolHelper,ee as OverrideHelper,Z as SymbolHelper,ce as slsDashToTemplateArray,Y as symbolToCIM};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{GeometricEffectOffsetMethod as t}from"./enums.js";const e=.03;class s{constructor(){this._path=[]}path(){return this._path}addPath(t,e){e||t.reverse(),Array.prototype.push.apply(this._path,t),e||t.reverse()}static mergePath(t,e){e&&Array.prototype.push.apply(t,e)}startPath(t){this._path.push(t)}lineTo(t){this._path.push(t)}close(){const t=this._path;t.length>1&&(t[0][0]===t[t.length-1][0]&&t[0][1]===t[t.length-1][1]||t.push([t[0][0],t[0][1]]))}}class n{constructor(t=0,e=!1){}normalize(t){const e=Math.sqrt(t[0]*t[0]+t[1]*t[1]);t[0]/=e,t[1]/=e}calculateLength(t,e){const s=e[0]-t[0],n=e[1]-t[1];return Math.sqrt(s*s+n*n)}calculateSegLength(t,e){return this.calculateLength(t[e],t[e+1])}calculatePathLength(t){let e=0;const s=t?t.length:0;for(let n=0;n<s-1;++n)e+=this.calculateSegLength(t,n);return e}calculatePathArea(t){let e=0;const s=t?t.length:0;for(let n=0;n<s-1;++n)e+=(t[n+1][0]-t[n][0])*(t[n+1][1]+t[n][1]);return e/2}getCoord2D(t,e,s){return[t[0]+(e[0]-t[0])*s,t[1]+(e[1]-t[1])*s]}getSegCoord2D(t,e,s){return this.getCoord2D(t[e],t[e+1],s)}getAngle(t,e,s){const n=e[0]-t[0],r=e[1]-t[1];return Math.atan2(r,n)}getSegAngle(t,e,s){return this.getAngle(t[e],t[e+1],s)}getAngleCS(t,e,s){const n=e[0]-t[0],r=e[1]-t[1],h=Math.sqrt(n*n+r*r);return h>0?[n/h,r/h]:[1,0]}getSegAngleCS(t,e,s){return this.getAngleCS(t[e],t[e+1],s)}cut(t,e,s,n){return[s<=0?t[e]:this.getSegCoord2D(t,e,s),n>=1?t[e+1]:this.getSegCoord2D(t,e,n)]}addSegment(t,e,s){s&&t.push(e[0]),t.push(e[1])}getSubCurve(t,e,s){const n=[];return this.appendSubCurve(n,t,e,s)?n:null}appendSubCurve(t,e,s,n){const r=e?e.length-1:0;let h=0,l=!0,o=0;for(;o<r;){const r=this.calculateSegLength(e,o);if(0!==r){if(l){if(h+r>s){const a=(s-h)/r;let u=1,c=!1;h+r>=n&&(u=(n-h)/r,c=!0);const i=this.cut(e,o,a,u);if(i&&this.addSegment(t,i,l),c)break;l=!1}}else{if(h+r>n){const s=this.cut(e,o,0,(n-h)/r);s&&this.addSegment(t,s,l);break}this.addSegment(t,[e[o],e[o+1]],l)}h+=r,++o}else++o}return!0}getCIMPointAlong(t,e){const s=t?t.length-1:0;let n=0,r=-1;for(;r<s;){++r;const s=this.calculateSegLength(t,r);if(0!==s){if(n+s>e){const h=(e-n)/s;return this.getCoord2D(t[r],t[r+1],h)}n+=s}}return null}isEmpty(t,e){if(!t||t.length<=1)return!0;const s=t?t.length-1:0;let n=-1;for(;n<s;){if(++n,t[n+1][0]!==t[n][0]||t[n+1][1]!==t[n][1])return!1;if(e&&t[n+1][2]!==t[n][2])return!1}return!0}offset(e,s,n,r,h){if(!e||e.length<2)return null;let l=0,o=e[l++],a=l;for(;l<e.length;){const t=e[l];t[0]===o[0]&&t[1]===o[1]||(l!==a&&(e[a]=e[l]),o=e[a++]),l++}const u=e[0][0]===e[a-1][0]&&e[0][1]===e[a-1][1];if(u&&--a,a<(u?3:2))return null;const c=[];o=u?e[a-1]:null;let i=e[0];for(let g=0;g<a;g++){const h=g===a-1?u?e[0]:null:e[g+1];if(o)if(h){const e=[h[0]-i[0],h[1]-i[1]];this.normalize(e);const l=[i[0]-o[0],i[1]-o[1]];this.normalize(l);const a=l[0]*e[1]-l[1]*e[0],u=l[0]*e[0]+l[1]*e[1];if(a>=0==s<=0){if(u<1){const t=[e[0]-l[0],e[1]-l[1]];this.normalize(t);const n=Math.sqrt((1+u)/2);if(n>1/r){const e=-Math.abs(s)/n;c.push([i[0]-t[0]*e,i[1]-t[1]*e])}}}else switch(n){case t.Mitered:{const t=Math.sqrt((1+u)/2);if(t>0&&1/t<r){const n=[e[0]-l[0],e[1]-l[1]];this.normalize(n);const r=Math.abs(s)/t;c.push([i[0]-n[0]*r,i[1]-n[1]*r]);break}}case t.Bevelled:c.push([i[0]+l[1]*s,i[1]-l[0]*s]),c.push([i[0]+e[1]*s,i[1]-e[0]*s]);break;case t.Rounded:if(u<1){c.push([i[0]+l[1]*s,i[1]-l[0]*s]);const t=Math.floor(2.5*(1-u));if(t>0){const n=1/t;let r=n;for(let h=1;h<t;h++,r+=n){const t=[l[1]*(1-r)+e[1]*r,-l[0]*(1-r)-e[0]*r];this.normalize(t),c.push([i[0]+t[0]*s,i[1]+t[1]*s])}}c.push([i[0]+e[1]*s,i[1]-e[0]*s])}break;case t.Square:default:if(a<0)c.push([i[0]+(l[1]+l[0])*s,i[1]+(l[1]-l[0])*s]),c.push([i[0]+(e[1]-e[0])*s,i[1]-(e[0]+e[1])*s]);else{const t=Math.sqrt((1+Math.abs(u))/2),n=[e[0]-l[0],e[1]-l[1]];this.normalize(n);const r=s/t;c.push([i[0]-n[0]*r,i[1]-n[1]*r])}}}else{const t=[i[0]-o[0],i[1]-o[1]];this.normalize(t),c.push([i[0]+t[1]*s,i[1]-t[0]*s])}else{const t=[h[0]-i[0],h[1]-i[1]];this.normalize(t),c.push([i[0]+t[1]*s,i[1]-t[0]*s])}o=i,i=h}return c.length<(u?3:2)?null:(u&&c.push([c[0][0],c[0][1]]),c)}}export{n as CurveHelper,e as PIXEL_TOLERANCE,s as PathHelper};
|
|
5
|
+
import{GeometricEffectOffsetMethod as t}from"./enums.js";const e=.03;class s{constructor(){this._path=[]}path(){return this._path}addPath(t,e){e||t.reverse(),Array.prototype.push.apply(this._path,t),e||t.reverse()}static mergePath(t,e){e&&Array.prototype.push.apply(t,e)}startPath(t){this._path.push(t)}lineTo(t){this._path.push(t)}close(){const t=this._path;t.length>1&&(t[0][0]===t[t.length-1][0]&&t[0][1]===t[t.length-1][1]||t.push([t[0][0],t[0][1]]))}}class n{constructor(t=0,e=!1){}normalize(t){const e=Math.sqrt(t[0]*t[0]+t[1]*t[1]);0!==e&&(t[0]/=e,t[1]/=e)}calculateLength(t,e){const s=e[0]-t[0],n=e[1]-t[1];return Math.sqrt(s*s+n*n)}calculateSegLength(t,e){return this.calculateLength(t[e],t[e+1])}calculatePathLength(t){let e=0;const s=t?t.length:0;for(let n=0;n<s-1;++n)e+=this.calculateSegLength(t,n);return e}calculatePathArea(t){let e=0;const s=t?t.length:0;for(let n=0;n<s-1;++n)e+=(t[n+1][0]-t[n][0])*(t[n+1][1]+t[n][1]);return e/2}getCoord2D(t,e,s){return[t[0]+(e[0]-t[0])*s,t[1]+(e[1]-t[1])*s]}getSegCoord2D(t,e,s){return this.getCoord2D(t[e],t[e+1],s)}getAngle(t,e,s){const n=e[0]-t[0],r=e[1]-t[1];return Math.atan2(r,n)}getSegAngle(t,e,s){return this.getAngle(t[e],t[e+1],s)}getAngleCS(t,e,s){const n=e[0]-t[0],r=e[1]-t[1],h=Math.sqrt(n*n+r*r);return h>0?[n/h,r/h]:[1,0]}getSegAngleCS(t,e,s){return this.getAngleCS(t[e],t[e+1],s)}cut(t,e,s,n){return[s<=0?t[e]:this.getSegCoord2D(t,e,s),n>=1?t[e+1]:this.getSegCoord2D(t,e,n)]}addSegment(t,e,s){s&&t.push(e[0]),t.push(e[1])}getSubCurve(t,e,s){const n=[];return this.appendSubCurve(n,t,e,s)?n:null}appendSubCurve(t,e,s,n){const r=e?e.length-1:0;let h=0,l=!0,o=0;for(;o<r;){const r=this.calculateSegLength(e,o);if(0!==r){if(l){if(h+r>s){const a=(s-h)/r;let u=1,c=!1;h+r>=n&&(u=(n-h)/r,c=!0);const i=this.cut(e,o,a,u);if(i&&this.addSegment(t,i,l),c)break;l=!1}}else{if(h+r>n){const s=this.cut(e,o,0,(n-h)/r);s&&this.addSegment(t,s,l);break}this.addSegment(t,[e[o],e[o+1]],l)}h+=r,++o}else++o}return!0}getCIMPointAlong(t,e){const s=t?t.length-1:0;let n=0,r=-1;for(;r<s;){++r;const s=this.calculateSegLength(t,r);if(0!==s){if(n+s>e){const h=(e-n)/s;return this.getCoord2D(t[r],t[r+1],h)}n+=s}}return null}isEmpty(t,e){if(!t||t.length<=1)return!0;const s=t?t.length-1:0;let n=-1;for(;n<s;){if(++n,t[n+1][0]!==t[n][0]||t[n+1][1]!==t[n][1])return!1;if(e&&t[n+1][2]!==t[n][2])return!1}return!0}offset(e,s,n,r,h){if(!e||e.length<2)return null;let l=0,o=e[l++],a=l;for(;l<e.length;){const t=e[l];t[0]===o[0]&&t[1]===o[1]||(l!==a&&(e[a]=e[l]),o=e[a++]),l++}const u=e[0][0]===e[a-1][0]&&e[0][1]===e[a-1][1];if(u&&--a,a<(u?3:2))return null;const c=[];o=u?e[a-1]:null;let i=e[0];for(let g=0;g<a;g++){const h=g===a-1?u?e[0]:null:e[g+1];if(o)if(h){const e=[h[0]-i[0],h[1]-i[1]];this.normalize(e);const l=[i[0]-o[0],i[1]-o[1]];this.normalize(l);const a=l[0]*e[1]-l[1]*e[0],u=l[0]*e[0]+l[1]*e[1];if(0===a&&1===u){i=h;continue}if(a>=0==s<=0){if(u<1){const t=[e[0]-l[0],e[1]-l[1]];this.normalize(t);const n=Math.sqrt((1+u)/2);if(n>1/r){const e=-Math.abs(s)/n;c.push([i[0]-t[0]*e,i[1]-t[1]*e])}}}else switch(n){case t.Mitered:{const t=Math.sqrt((1+u)/2);if(t>0&&1/t<r){const n=[e[0]-l[0],e[1]-l[1]];this.normalize(n);const r=Math.abs(s)/t;c.push([i[0]-n[0]*r,i[1]-n[1]*r]);break}}case t.Bevelled:c.push([i[0]+l[1]*s,i[1]-l[0]*s]),c.push([i[0]+e[1]*s,i[1]-e[0]*s]);break;case t.Rounded:if(u<1){c.push([i[0]+l[1]*s,i[1]-l[0]*s]);const t=Math.floor(2.5*(1-u));if(t>0){const n=1/t;let r=n;for(let h=1;h<t;h++,r+=n){const t=[l[1]*(1-r)+e[1]*r,-l[0]*(1-r)-e[0]*r];this.normalize(t),c.push([i[0]+t[0]*s,i[1]+t[1]*s])}}c.push([i[0]+e[1]*s,i[1]-e[0]*s])}break;case t.Square:default:if(a<0)c.push([i[0]+(l[1]+l[0])*s,i[1]+(l[1]-l[0])*s]),c.push([i[0]+(e[1]-e[0])*s,i[1]-(e[0]+e[1])*s]);else{const t=Math.sqrt((1+Math.abs(u))/2),n=[e[0]-l[0],e[1]-l[1]];this.normalize(n);const r=s/t;c.push([i[0]-n[0]*r,i[1]-n[1]*r])}}}else{const t=[i[0]-o[0],i[1]-o[1]];this.normalize(t),c.push([i[0]+t[1]*s,i[1]-t[0]*s])}else{const t=[h[0]-i[0],h[1]-i[1]];this.normalize(t),c.push([i[0]+t[1]*s,i[1]-t[0]*s])}o=i,i=h}return c.length<(u?3:2)?null:(u&&c.push([c[0][0],c[0][1]]),c)}}export{n as CurveHelper,e as PIXEL_TOLERANCE,s as PathHelper};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{WGLGeometryType as e,WGLSymbologyType as t}from"../../views/2d/engine/webgl/enums.js";import{createMaterialKey as a}from"../../views/2d/engine/webgl/materialKey/MaterialKey.js";const s={marker:e.MARKER,fill:e.FILL,line:e.LINE,text:e.TEXT};class l{constructor(e,l,r
|
|
5
|
+
import{WGLGeometryType as e,WGLSymbologyType as t}from"../../views/2d/engine/webgl/enums.js";import{createMaterialKey as a}from"../../views/2d/engine/webgl/materialKey/MaterialKey.js";const s={marker:e.MARKER,fill:e.FILL,line:e.LINE,text:e.TEXT};class l{constructor(e,l,n,r){const c={minScale:l?.minScale,maxScale:l?.maxScale},m=i(c);this.layers=e,this.data=l,this.hash=this._createHash()+m,this.rendererKey=n;const o={isOutline:!1,placement:null,symbologyType:t.DEFAULT,vvFlags:n};for(const t of e){const e=s[t.type];o.isOutline="line"===t.type&&t.isOutline,t.materialKey=a(e,o),t.maxVVSize=r,t.scaleInfo=c,t.templateHash+=m}}get type(){return"expanded-cim"}_createHash(){let e="";for(const t of this.layers)e+=t.templateHash;return e}}function i(e){return e.minScale||e.maxScale?e.minScale+"-"+e.maxScale:""}export{l as ExpandedCIM};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../Color.js";import{clone as t}from"../../core/lang.js";import i from"../../core/Logger.js";import{isSome as o}from"../../core/maybe.js";import{pt2px as r}from"../../core/screenUtils.js";import{numericHash as n}from"../../core/string.js";import{createRendererExpression as l,ArcadeExpression as a}from"../../support/arcadeOnDemand.js";import{CIMSymbolHelper as s,OverrideHelper as c}from"./CIMSymbolHelper.js";import{CapType as f,JoinType as m,Alignment as p}from"./enums.js";import{getExtent as u,getSDFMetrics as y}from"./SDFHelper.js";import{fromCIMColor as h,getValue as g,_adjustTextCase as d,createLabelOverrideFunction as S,evaluateValueOrFunction as v,isGeometryEngineRequired as N,importGeometryEngine as b}from"./utils.js";import{CIMEffectHelper as C}from"./effects/CIMEffectHelper.js";import k from"../../views/2d/arcade/callExpressionWithFeature.js";import{getFontFamily as O}from"../../views/2d/engine/webgl/fontUtils.js";const P=i.getLogger("esri.symbols.cim.cimAnalyzer");function M(e){switch(e){case"Butt":return f.BUTT;case"Square":return f.SQUARE;default:return f.ROUND}}function L(e){switch(e){case"Bevel":return m.BEVEL;case"Miter":return m.MITER;default:return m.ROUND}}function I(e){switch(e){case"Left":default:return"left";case"Right":return"right";case"Center":return"center";case"Justify":return P.warnOnce("Horizontal alignment 'justify' is not implemented. Falling back to 'center'."),"center"}}function w(e){switch(e){case"Top":default:return"top";case"Center":return"middle";case"Baseline":return"baseline";case"Bottom":return"bottom"}}function X(e){let t="",i="";if(e){const o=e.toLowerCase();o.includes("italic")?t="italic":o.includes("oblique")&&(t="oblique"),o.includes("bold")?i="bold":o.includes("light")&&(i="lighter")}return{style:t,weight:i}}function z(e){return e.underline?"underline":e.strikethrough?"line-through":"none"}function H(e,t,i,o){let r;e[t]?r=e[t]:(r={},e[t]=r),r[i]=o}function J(e){const t=e.markerPlacement;return t&&t.angleToLine?p.MAP:p.SCREEN}async function x(e,t,i,o,r){const n=o??[];if(!e)return n;let a,s;const c={};if("CIMSymbolReference"!==e.type)return P.error("Expect cim type to be 'CIMSymbolReference'"),n;if(a=e.symbol,s=e.primitiveOverrides,s){const e=[];for(const i of s){const o=i.valueExpressionInfo;if(o&&t){const r=o.expression,n=l(r,t.spatialReference,t.fields).then((e=>{e&&H(c,i.primitiveName,i.propertyName,e)}));e.push(n)}else null!=i.value&&H(c,i.primitiveName,i.propertyName,i.value)}e.length>0&&await Promise.all(e)}const f=[];switch(ne(a,i,f),f.length>0&&await Promise.all(f),a.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":R(a,s,c,t,n,i,r)}return n}function R(e,t,i,o,r,n,l){if(!e)return;const a=e.symbolLayers;if(!a)return;const f=e.effects;let m;const u=s.getSize(e);"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(m=p.MAP);let y=a.length;for(;y--;){const s=a[y];if(!s||!1===s.enable)continue;let p;f&&f.length&&(p=[...f]);const h=s.effects;h&&h.length&&(f?p.push(...h):p=[...h]);const g=[];let d;c.findEffectOverrides(p,t,g),d=g.length>0?ee(p,g,i,o):p;const S=[];switch(c.findApplicableOverrides(s,t,S),s.type){case"CIMSolidFill":Y(s,d,i,S,o,r);break;case"CIMPictureFill":A(s,d,i,S,o,n,r);break;case"CIMHatchFill":E(s,d,i,S,o,r);break;case"CIMGradientFill":$(s,d,i,S,o,r);break;case"CIMSolidStroke":F(s,d,i,S,o,r,"CIMPolygonSymbol"===e.type,u);break;case"CIMPictureStroke":j(s,d,i,S,o,r,"CIMPolygonSymbol"===e.type,u);break;case"CIMGradientStroke":T(s,d,i,S,o,r,"CIMPolygonSymbol"===e.type,u);break;case"CIMCharacterMarker":if(W(s,d,i,S,o,r))break;break;case"CIMPictureMarker":if(W(s,d,i,S,o,r))break;"CIMLineSymbol"===e.type&&(m=J(s)),D(s,d,i,S,o,n,r,m,u);break;case"CIMVectorMarker":if(W(s,d,i,S,o,r))break;"CIMLineSymbol"===e.type&&(m=J(s)),U(s,d,i,S,o,r,n,m,u,l);break;default:P.error("Cannot analyze CIM layer",s.type)}}}function Y(e,t,i,o,r,l){const a=e.primitiveName,s=h(e.color),[c,f]=re(o,a,t,null),m=n(JSON.stringify(e)+f).toString();l.push({type:"fill",templateHash:m,materialHash:c?()=>m:m,cim:e,materialOverrides:null,colorLocked:e.colorLocked,color:Z(a,i,"Color",r,s,_),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t})}function A(e,t,i,r,l,a,s){const c=e.primitiveName,f=e.tintColor?h(e.tintColor):{r:255,g:255,b:255,a:1},[m,p]=re(r,c,t,null),u=n(JSON.stringify(e)+p).toString(),y=n(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString();let d=g(e.scaleX);if("width"in e){const t=e.width;let i=1;const r=a.getResource(e.url);o(r)&&(i=r.width/r.height),d/=i*(e.height/t)}s.push({type:"fill",templateHash:u,materialHash:m?()=>y:y,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:Z(c,i,"TintColor",l,f,_),height:Z(c,i,"Height",l,e.height),scaleX:Z(c,i,"ScaleX",l,d),angle:Z(c,i,"Rotation",l,g(e.rotation)),offsetX:Z(c,i,"OffsetX",l,g(e.offsetX)),offsetY:Z(c,i,"OffsetY",l,g(e.offsetY)),url:e.url})}function E(e,t,i,o,r,l){const a=["Rotation","OffsetX","OffsetY"],s=o.filter((t=>t.primitiveName!==e.primitiveName&&!a.includes(t.propertyName))),c=e.primitiveName,[f,m]=re(o,c,t,null),p=n(JSON.stringify(e)+m).toString(),u=n(`${e.separation}${JSON.stringify(e.lineSymbol)}`).toString();let y={r:255,g:255,b:255,a:1};if(e.lineSymbol){const t=e.lineSymbol?.symbolLayers.find((e=>"CIMSolidStroke"===e.type));t&&(y=h(t.color))}l.push({type:"fill",templateHash:p,materialHash:f?ie(u,i,s,r):u,cim:e,materialOverrides:s,colorLocked:e.colorLocked,effects:t,color:y,height:Z(c,i,"Separation",r,e.separation),scaleX:1,angle:Z(c,i,"Rotation",r,g(e.rotation)),offsetX:Z(c,i,"OffsetX",r,g(e.offsetX)),offsetY:Z(c,i,"OffsetY",r,g(e.offsetY))})}function $(e,t,i,o,r,l){const a=e.primitiveName,[s,c]=re(o,a,t,null),f=n(JSON.stringify(e)+c).toString();l.push({type:"fill",templateHash:f,materialHash:s?ie(f,i,o,r):f,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},height:0,angle:0,offsetX:0,offsetY:0,scaleX:1})}function F(e,t,i,o,r,l,a,s){const c=e.primitiveName,f=h(e.color),m=void 0!==e.width?e.width:4,p=M(e.capStyle),u=L(e.joinStyle),y=e.miterLimit,[g,d]=re(o,c,t,null),S=n(JSON.stringify(e)+d).toString();let v,N;if(t&&t instanceof Array&&t.length>0){const e=t[t.length-1];if("CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&null===e.offsetAlongLine){const e=(t=[...t]).pop();v=e.dashTemplate,N=e.scaleDash}}l.push({type:"line",templateHash:S,materialHash:g?()=>S:S,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:Z(c,i,"Color",r,f,_),width:Z(c,i,"Width",r,m),cap:Z(c,i,"CapStyle",r,p),join:Z(c,i,"JoinStyle",r,u),miterLimit:Z(c,i,"MiterLimit",r,y),referenceWidth:s,zOrder:Q(e.name),dashTemplate:v,scaleDash:N})}function j(e,t,i,o,r,l,a,s){const c=n(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString(),f=e.primitiveName,m=h(e.tintColor),p=void 0!==e.width?e.width:4,u=M(e.capStyle),y=L(e.joinStyle),g=e.miterLimit,[d,S]=re(o,f,t,null),v=n(JSON.stringify(e)+S).toString();l.push({type:"line",templateHash:v,materialHash:d?()=>c:c,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:Z(f,i,"TintColor",r,m,_),width:Z(f,i,"Width",r,p),cap:Z(f,i,"CapStyle",r,u),join:Z(f,i,"JoinStyle",r,y),miterLimit:Z(f,i,"MiterLimit",r,g),referenceWidth:s,zOrder:Q(e.name),dashTemplate:null,scaleDash:!1,url:e.url})}function T(e,t,i,o,r,l,a,s){const c=e.primitiveName,f=void 0!==e.width?e.width:4,m=M(e.capStyle),p=L(e.joinStyle),u=e.miterLimit,[y,h]=re(o,c,t,null),g=n(JSON.stringify(e)+h).toString();l.push({type:"line",templateHash:g,materialHash:y?ie(g,i,o,r):g,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},width:Z(c,i,"Width",r,f),cap:Z(c,i,"CapStyle",r,m),join:Z(c,i,"JoinStyle",r,p),miterLimit:Z(c,i,"MiterLimit",r,u),referenceWidth:s,zOrder:Q(e.name),dashTemplate:null,scaleDash:!1})}function W(e,t,i,o,r,l){const a=e.markerPlacement;if(!a||"CIMMarkerPlacementInsidePolygon"!==a.type)return!1;const s=a,c=["Rotation","OffsetX","OffsetY"],f=o.filter((t=>t.primitiveName!==e.primitiveName&&!c.includes(t.propertyName))),m="url"in e?e.url:null,[p,u]=re(o,s.primitiveName,t,null),y=n(JSON.stringify(e)+u).toString();let h=s.stepY,d=null,S=1;return a.shiftOddRows&&(h*=2,d=e=>e?2*e:0,S=.5),l.push({type:"fill",templateHash:y,materialHash:p?ie(y,i,f,r):y,cim:e,materialOverrides:f,colorLocked:e.colorLocked,effects:t,color:{r:255,g:255,b:255,a:1},height:Z(s.primitiveName,i,"StepY",r,h,d),scaleX:S,angle:Z(s.primitiveName,i,"GridAngle",r,s.gridAngle),offsetX:Z(s.primitiveName,i,"OffsetX",r,g(s.offsetX)),offsetY:Z(s.primitiveName,i,"OffsetY",r,g(s.offsetY)),url:m}),!0}function D(e,t,i,r,l,a,s,c,f){const m=e.primitiveName,p=g(e.size);let u=g(e.scaleX);const y=g(e.rotation),d=g(e.offsetX),S=g(e.offsetY),v=e.tintColor?h(e.tintColor):{r:255,g:255,b:255,a:1},N=n(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString(),b=te(e.markerPlacement,r,i,l),[C,k]=re(r,m,t,b),O=n(JSON.stringify(e)+k).toString(),P=e.anchorPoint??{x:0,y:0};if("width"in e){const t=e.width;let i=1;const r=a.getResource(e.url);o(r)&&(i=r.width/r.height),u/=i*(p/t)}s.push({type:"marker",templateHash:O,materialHash:C?()=>N:N,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:!1,alignment:c,size:Z(m,i,"Size",l,p),scaleX:Z(m,i,"ScaleX",l,u),rotation:Z(m,i,"Rotation",l,y),offsetX:Z(m,i,"OffsetX",l,d),offsetY:Z(m,i,"OffsetY",l,S),color:Z(m,i,"TintColor",l,v,_),anchorPoint:{x:P.x,y:-P.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,frameHeight:0,rotateClockwise:e.rotateClockwise,referenceSize:f,sizeRatio:1,markerPlacement:e.markerPlacement,url:e.url})}function U(e,t,i,o,r,n,l,a,s,c){const f=e.markerGraphics;if(!f)return;let m=0;if(e.scaleSymbolsProportionally){const t=e.frame;t&&(m=t.ymax-t.ymin)}const p=te(e.markerPlacement,o,i,r);for(const u of f)if(u){const f=u.symbol;if(!f)continue;switch(f.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":B(e,t,p,u,o,i,r,n,l,a,s,m,c);break;case"CIMTextSymbol":G(e,t,p,u,i,o,r,n,a,s,m)}}}function G(e,t,i,o,r,l,a,f,m,p,u){const y=[];c.findApplicableOverrides(o,l,y);const N=o.geometry;if(!("x"in N)||!("y"in N))return;const b=o.symbol,C=z(b),k=X(b.fontStyleName),P=O(b.fontFamilyName);b.font={family:P,decoration:C,...k};const M=e.frame,L=N.x-.5*(M.xmin+M.xmax),H=N.y-.5*(M.ymin+M.ymax),J=e.size/u,x=e.primitiveName,R=g(b.height)*J,Y=g(b.angle),A=g(e.offsetX)+(g(b.offsetX)+L)*J,E=g(e.offsetY)+(g(b.offsetY)+H)*J,$=h(s.getFillColor(b));let F=h(s.getStrokeColor(b)),j=s.getStrokeWidth(b);j||(F=h(s.getFillColor(b.haloSymbol)),j=b.haloSize*J);const[T,W]=re(l,x,t,i),D=JSON.stringify(e.effects)+Number(e.colorLocked)+JSON.stringify(e.anchorPoint)+e.anchorPointUnits+JSON.stringify(e.markerPlacement),U=n(JSON.stringify(o)+D+W).toString();let G=Z(o.primitiveName,r,"TextString",a,o.textString,d,b.textCase);if(null==G)return;const{fontStyleName:B}=b,q=P+(B?"-"+B.toLowerCase():"-regular"),V=q;"string"==typeof G&&G.includes("[")&&b.fieldMap&&(G=S(b.fieldMap,G,b.textCase)),f.push({type:"text",templateHash:U,materialHash:T||"function"==typeof G||G.match(/\[(.*?)\]/)?(e,t,i)=>V+"-"+v(G,e,t,i):V+"-"+n(G),cim:b,materialOverrides:null,colorLocked:e.colorLocked,effects:t,alignment:m,anchorPoint:{x:e.anchorPoint?e.anchorPoint.x:0,y:e.anchorPoint?e.anchorPoint.y:0},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,fontName:q,decoration:C,weight:Z(x,r,"Weight",a,k.weight),style:Z(x,r,"Size",a,k.style),size:Z(x,r,"Size",a,R),angle:Z(x,r,"Rotation",a,Y),offsetX:Z(x,r,"OffsetX",a,A),offsetY:Z(x,r,"OffsetY",a,E),horizontalAlignment:I(b.horizontalAlignment),verticalAlignment:w(b.verticalAlignment),text:G,color:$,outlineColor:F,outlineSize:j,referenceSize:p,sizeRatio:1,markerPlacement:i})}function B(e,t,i,r,l,a,c,f,m,p,d,S,v){const N=r.symbol,b=N.symbolLayers;if(!b)return;if(v)return void V(e,t,i,r,a,l,c,f,m,p,d,S);let k=b.length;if(le(b))return void q(e,t,i,r,b,l,a,c,f,p,d,S);const O=C.applyEffects(N.effects,r.geometry,m.geometryEngine);if(O)for(;k--;){const v=b[k];if(v&&!1!==v.enable)switch(v.type){case"CIMSolidFill":case"CIMSolidStroke":{const N=C.applyEffects(v.effects,O,m.geometryEngine),b=u(N);if(!b)continue;const[k,P,M]=y(b,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),L="CIMSolidFill"===v.type,I={type:"sdf",geom:N,asFill:L},w=e.primitiveName,X=g(e.size)??10,z=g(e.rotation),H=g(e.offsetX),J=g(e.offsetY),x=v.path,R=v.primitiveName,Y=h(L?s.getFillColor(v):s.getStrokeColor(v)),A=L?{r:0,g:0,b:0,a:0}:h(s.getStrokeColor(v)),E=s.getStrokeWidth(v);if(!L&&!E)break;let $=!1,F="";for(const e of l)e.primitiveName!==R&&e.primitiveName!==w||(void 0!==e.value?F+=`-${e.primitiveName}-${e.propertyName}-${JSON.stringify(e.value)}`:e.valueExpressionInfo&&($=!0));o(t)&&"function"==typeof t&&($=!0);const j=JSON.stringify({...e,markerGraphics:null}),T=n(JSON.stringify(I)+x).toString(),W={type:"marker",templateHash:n(JSON.stringify(r)+JSON.stringify(v)+j+F).toString(),materialHash:$?()=>T:T,cim:I,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:p,anchorPoint:{x:P,y:M},isAbsoluteAnchorPoint:!1,size:Z(e.primitiveName,a,"Size",c,X),rotation:Z(e.primitiveName,a,"Rotation",c,z),offsetX:Z(e.primitiveName,a,"OffsetX",c,H),offsetY:Z(e.primitiveName,a,"OffsetY",c,J),scaleX:1,frameHeight:S,rotateClockwise:e.rotateClockwise,referenceSize:d,sizeRatio:k,color:Z(R,a,"Color",c,Y,_),outlineColor:Z(R,a,"Color",c,A,_),outlineWidth:Z(R,a,"Width",c,E),markerPlacement:i,path:x};f.push(W);break}default:V(e,t,i,r,a,l,c,f,m,p,d,S)}}}function q(e,t,i,o,r,l,a,c,f,m,p,d){const S=o.geometry,v=r[0],N=r[1],b=u(S);if(!b)return;const[C,k,O]=y(b,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),P={type:"sdf",geom:S,asFill:!0},M=e.primitiveName,L=g(e.size),I=g(e.rotation),w=g(e.offsetX),X=g(e.offsetY),z=N.path,H=N.primitiveName,J=v.primitiveName,x=h(s.getFillColor(N)),R=h(s.getStrokeColor(v)),Y=s.getStrokeWidth(v);let A=!1,E="";for(const n of l)n.primitiveName!==H&&n.primitiveName!==J&&n.primitiveName!==M||(void 0!==n.value?E+=`-${n.primitiveName}-${n.propertyName}-${JSON.stringify(n.value)}`:n.valueExpressionInfo&&(A=!0));const $=JSON.stringify({...e,markerGraphics:null}),F=n(JSON.stringify(P)+z).toString(),j={type:"marker",templateHash:n(JSON.stringify(o)+JSON.stringify(N)+JSON.stringify(v)+$+E).toString(),materialHash:A?()=>F:F,cim:P,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:m,anchorPoint:{x:k,y:O},isAbsoluteAnchorPoint:!1,size:Z(e.primitiveName,a,"Size",c,L),rotation:Z(e.primitiveName,a,"Rotation",c,I),offsetX:Z(e.primitiveName,a,"OffsetX",c,w),offsetY:Z(e.primitiveName,a,"OffsetY",c,X),scaleX:1,frameHeight:d,rotateClockwise:e.rotateClockwise,referenceSize:p,sizeRatio:C,color:Z(H,a,"Color",c,x,_),outlineColor:Z(J,a,"Color",c,R,_),outlineWidth:Z(J,a,"Width",c,Y),markerPlacement:i,path:z};f.push(j)}function V(e,t,i,l,a,c,f,m,p,u,y,h){const d=K(e,l);let S=[];const v=["Rotation","OffsetX","OffsetY"];S=c.filter((t=>t.primitiveName!==e.primitiveName||!v.includes(t.propertyName)));let N="";for(const o of c)void 0!==o.value&&(N+=`-${o.primitiveName}-${o.propertyName}-${JSON.stringify(o.value)}`);const[b,C,k]=s.getTextureAnchor(d,p),O=e.primitiveName,P=g(e.rotation),M=g(e.offsetX),L=g(e.offsetY),I=n(JSON.stringify(d)+N).toString(),w={type:"marker",templateHash:I,materialHash:S.length>0||o(t)&&"function"==typeof t?ie(I,a,S,f):I,cim:d,materialOverrides:S,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:u,anchorPoint:{x:b,y:C},isAbsoluteAnchorPoint:!1,size:e.size,rotation:Z(O,a,"Rotation",f,P),offsetX:Z(O,a,"OffsetX",f,M),offsetY:Z(O,a,"OffsetY",f,L),color:{r:255,g:255,b:255,a:1},outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,scaleX:1,frameHeight:h,rotateClockwise:e.rotateClockwise,referenceSize:y,sizeRatio:k/r(e.size),markerPlacement:i};m.push(w)}function K(e,t){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:[t],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function Q(e){if(e&&0===e.indexOf("Level_")){const t=parseInt(e.substr(6),10);if(!isNaN(t))return t}return 0}function _(t){if(!t||0===t.length)return null;const i=new e(t).toRgba();return{r:i[0],g:i[1],b:i[2],a:i[3]}}function Z(e,t,i,o,r,n,l){const s=t[e];if(s){const e=s[i];if("string"==typeof e||"number"==typeof e||e instanceof Array)return n?n.call(null,e,l):e;if(null!=e&&e instanceof a)return(t,i,a)=>{let s=k(e,t,{$view:a},o.geometryType,i);return null!==s&&n&&(s=n.call(null,s,l)),null!==s?s:r}}return r}function ee(e,i,o,r){for(const t of i){if(t.valueExpressionInfo){const e=o[t.primitiveName]&&o[t.primitiveName][t.propertyName];e instanceof a&&(t.fn=(t,i,o)=>k(e,t,{$view:o},r.geometryType,i))}}const n=e=>e?e.charAt(0).toLowerCase()+e.substr(1):e;return(o,r,l)=>{for(const e of i)e.fn&&(e.value=e.fn(o,r,l));const a=[];for(let s of e){const e=s?.primitiveName;if(e){let o=!1;for(const r of i)if(r.primitiveName===e){const e=n(r.propertyName);null!=r.value&&r.value!==s[e]&&(o||(s=t(s),o=!0),s[e]=r.value)}}a.push(s)}return a}}function te(e,i,o,r){const n=[];if(c.findApplicableOverrides(e,i,n),0===n.length)return e;for(const t of n){if(t.valueExpressionInfo){const e=o[t.primitiveName]&&o[t.primitiveName][t.propertyName];e instanceof a&&(t.fn=(t,i,o)=>k(e,t,{$view:o},r.geometryType,i))}}const l=e=>e?e.charAt(0).toLowerCase()+e.substr(1):e;return(i,o,r)=>{for(const e of n)e.fn&&(e.value=e.fn(i,o,r));const a=t(e),s=e.primitiveName;for(const e of n)if(e.primitiveName===s){const t=l(e.propertyName);null!=e.value&&e.value!==a[t]&&(a[t]=e.value)}return a}}function ie(e,t,i,o){for(const r of i){if(r.valueExpressionInfo){const e=t[r.primitiveName]&&t[r.primitiveName][r.propertyName];e instanceof a&&(r.fn=(t,i,r)=>k(e,t,{$view:r},o.geometryType,i))}}return(t,o,r)=>{for(const e of i)e.fn&&(e.value=e.fn(t,o,r));return n(e+c.buildOverrideKey(i)).toString()}}function oe(e,t){if(!t||0===t.length)return e;const i=JSON.parse(JSON.stringify(e));return c.applyOverrides(i,t),i}function re(e,t,i,r){let n=!1,l="";for(const o of e)o.primitiveName===t&&(void 0!==o.value?l+=`-${o.primitiveName}-${o.propertyName}-${JSON.stringify(o.value)}`:o.valueExpressionInfo&&(n=!0));return o(i)&&"function"==typeof i&&(n=!0),o(r)&&"function"==typeof r&&(n=!0),[n,l]}function ne(e,t,i){if(e&&t)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const o=e.symbolLayers;if(!o)return;for(const e of o)switch(se(e,t,i),e.type){case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":case"CIMPictureStroke":case"CIMGradientStroke":case"CIMCharacterMarker":case"CIMPictureMarker":"url"in e&&e.url&&i.push(t.fetchResource(e.url,null));break;case"CIMVectorMarker":{const o=e.markerGraphics;if(!o)continue;for(const e of o)if(e){const o=e.symbol;o&&ne(o,t,i)}}}}}}const le=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&!e[0].effects&&!e[1].effects;let ae;function se(e,t,i){if(!e.effects||o(t.geometryEngine))return;if(ae)return void i.push(ae);N(e.effects)&&(ae=b(),i.push(ae),ae.then((e=>t.geometryEngine=e)))}export{oe as analyzeCIMResource,x as analyzeCIMSymbol};
|
|
5
|
+
import e from"../../Color.js";import{clone as t}from"../../core/lang.js";import i from"../../core/Logger.js";import{isSome as o}from"../../core/maybe.js";import{pt2px as r,px2pt as n}from"../../core/screenUtils.js";import{numericHash as l}from"../../core/string.js";import{createRendererExpression as a,ArcadeExpression as s}from"../../support/arcadeOnDemand.js";import{CIMSymbolHelper as c,OverrideHelper as f}from"./CIMSymbolHelper.js";import{CapType as m,JoinType as p,Alignment as u}from"./enums.js";import{getExtent as y,getSDFMetrics as h}from"./SDFHelper.js";import{fromCIMColor as g,getValue as d,_adjustTextCase as S,createLabelOverrideFunction as v,evaluateValueOrFunction as N,isGeometryEngineRequired as b,importGeometryEngine as C}from"./utils.js";import{CIMEffectHelper as k}from"./effects/CIMEffectHelper.js";import O from"../../views/2d/arcade/callExpressionWithFeature.js";import{RANDOM_INSIDE_POLYGON_TEXTURE_SIZE as M}from"../../views/2d/engine/webgl/definitions.js";import{getFontFamily as P}from"../../views/2d/engine/webgl/fontUtils.js";const L=i.getLogger("esri.symbols.cim.cimAnalyzer");function I(e){switch(e){case"Butt":return m.BUTT;case"Square":return m.SQUARE;default:return m.ROUND}}function w(e){switch(e){case"Bevel":return p.BEVEL;case"Miter":return p.MITER;default:return p.ROUND}}function X(e){switch(e){case"Left":default:return"left";case"Right":return"right";case"Center":return"center";case"Justify":return L.warnOnce("Horizontal alignment 'justify' is not implemented. Falling back to 'center'."),"center"}}function z(e){switch(e){case"Top":default:return"top";case"Center":return"middle";case"Baseline":return"baseline";case"Bottom":return"bottom"}}function R(e){let t="",i="";if(e){const o=e.toLowerCase();o.includes("italic")?t="italic":o.includes("oblique")&&(t="oblique"),o.includes("bold")?i="bold":o.includes("light")&&(i="lighter")}return{style:t,weight:i}}function x(e){return e.underline?"underline":e.strikethrough?"line-through":"none"}function H(e,t,i,o){let r;e[t]?r=e[t]:(r={},e[t]=r),r[i]=o}function J(e){const t=e.markerPlacement;return t&&t.angleToLine?u.MAP:u.SCREEN}async function Y(e,t,i,o,r){const n=o??[];if(!e)return n;let l,s;const c={};if("CIMSymbolReference"!==e.type)return L.error("Expect cim type to be 'CIMSymbolReference'"),n;if(l=e.symbol,s=e.primitiveOverrides,s){const e=[];for(const i of s){const o=i.valueExpressionInfo;if(o&&t){const r=o.expression,n=a(r,t.spatialReference,t.fields).then((e=>{e&&H(c,i.primitiveName,i.propertyName,e)}));e.push(n)}else null!=i.value&&H(c,i.primitiveName,i.propertyName,i.value)}e.length>0&&await Promise.all(e)}const f=[];switch(ae(l,i,f),f.length>0&&await Promise.all(f),l.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":A(l,s,c,t,n,i,r)}return n}function A(e,t,i,o,r,n,l){if(!e)return;const a=e.symbolLayers;if(!a)return;const s=e.effects;let m;const p=c.getSize(e);"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(m=u.MAP);let y=a.length;for(;y--;){const c=a[y];if(!c||!1===c.enable)continue;let u;s&&s.length&&(u=[...s]);const h=c.effects;h&&h.length&&(s?u.push(...h):u=[...h]);const g=[];let d;f.findEffectOverrides(u,t,g),d=g.length>0?ie(u,g,i,o):u;const S=[];switch(f.findApplicableOverrides(c,t,S),c.type){case"CIMSolidFill":E(c,d,i,S,o,r);break;case"CIMPictureFill":$(c,d,i,S,o,n,r);break;case"CIMHatchFill":j(c,d,i,S,o,r);break;case"CIMGradientFill":F(c,d,i,S,o,r);break;case"CIMSolidStroke":T(c,d,i,S,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMPictureStroke":W(c,d,i,S,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMGradientStroke":D(c,d,i,S,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMCharacterMarker":if(U(c,d,i,S,o,r))break;break;case"CIMPictureMarker":if(U(c,d,i,S,o,r))break;"CIMLineSymbol"===e.type&&(m=J(c)),G(c,d,i,S,o,n,r,m,p);break;case"CIMVectorMarker":if(U(c,d,i,S,o,r))break;"CIMLineSymbol"===e.type&&(m=J(c)),B(c,d,i,S,o,r,n,m,p,l);break;default:L.error("Cannot analyze CIM layer",c.type)}}}function E(e,t,i,o,r,n){const a=e.primitiveName,s=g(e.color),[c,f]=le(o,a,t,null),m=l(JSON.stringify(e)+f).toString();n.push({type:"fill",templateHash:m,materialHash:c?()=>m:m,cim:e,materialOverrides:null,colorLocked:e.colorLocked,color:te(a,i,"Color",r,s,ee),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t,applyRandomOffset:!1})}function $(e,t,i,r,n,a,s){const c=e.primitiveName,f=e.tintColor?g(e.tintColor):{r:255,g:255,b:255,a:1},[m,p]=le(r,c,t,null),u=l(JSON.stringify(e)+p).toString(),y=l(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString();let h=d(e.scaleX);if("width"in e){const t=e.width;let i=1;const r=a.getResource(e.url);o(r)&&(i=r.width/r.height),h/=i*(e.height/t)}s.push({type:"fill",templateHash:u,materialHash:m?()=>y:y,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:te(c,i,"TintColor",n,f,ee),height:te(c,i,"Height",n,e.height),scaleX:te(c,i,"ScaleX",n,h),angle:te(c,i,"Rotation",n,d(e.rotation)),offsetX:te(c,i,"OffsetX",n,d(e.offsetX)),offsetY:te(c,i,"OffsetY",n,d(e.offsetY)),url:e.url,applyRandomOffset:!1})}function j(e,t,i,o,r,n){const a=["Rotation","OffsetX","OffsetY"],s=o.filter((t=>t.primitiveName!==e.primitiveName&&!a.includes(t.propertyName))),c=e.primitiveName,[f,m]=le(o,c,t,null),p=l(JSON.stringify(e)+m).toString(),u=l(`${e.separation}${JSON.stringify(e.lineSymbol)}`).toString();let y={r:255,g:255,b:255,a:1};if(e.lineSymbol){const t=e.lineSymbol?.symbolLayers.find((e=>"CIMSolidStroke"===e.type));t&&(y=g(t.color))}n.push({type:"fill",templateHash:p,materialHash:f?re(u,i,s,r):u,cim:e,materialOverrides:s,colorLocked:e.colorLocked,effects:t,color:y,height:te(c,i,"Separation",r,e.separation),scaleX:1,angle:te(c,i,"Rotation",r,d(e.rotation)),offsetX:te(c,i,"OffsetX",r,d(e.offsetX)),offsetY:te(c,i,"OffsetY",r,d(e.offsetY)),applyRandomOffset:!1})}function F(e,t,i,o,r,n){const a=e.primitiveName,[s,c]=le(o,a,t,null),f=l(JSON.stringify(e)+c).toString();n.push({type:"fill",templateHash:f,materialHash:s?re(f,i,o,r):f,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,applyRandomOffset:!1})}function T(e,t,i,o,r,n,a,s){const c=e.primitiveName,f=g(e.color),m=void 0!==e.width?e.width:4,p=I(e.capStyle),u=w(e.joinStyle),y=e.miterLimit,[h,d]=le(o,c,t,null),S=l(JSON.stringify(e)+d).toString();let v,N;if(t&&t instanceof Array&&t.length>0){const e=t[t.length-1];if("CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&null===e.offsetAlongLine){const e=(t=[...t]).pop();v=e.dashTemplate,N=e.scaleDash}}n.push({type:"line",templateHash:S,materialHash:h?()=>S:S,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:te(c,i,"Color",r,f,ee),width:te(c,i,"Width",r,m),cap:te(c,i,"CapStyle",r,p),join:te(c,i,"JoinStyle",r,u),miterLimit:te(c,i,"MiterLimit",r,y),referenceWidth:s,zOrder:Z(e.name),dashTemplate:v,scaleDash:N})}function W(e,t,i,o,r,n,a,s){const c=l(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString(),f=e.primitiveName,m=g(e.tintColor),p=void 0!==e.width?e.width:4,u=I(e.capStyle),y=w(e.joinStyle),h=e.miterLimit,[d,S]=le(o,f,t,null),v=l(JSON.stringify(e)+S).toString();n.push({type:"line",templateHash:v,materialHash:d?()=>c:c,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:te(f,i,"TintColor",r,m,ee),width:te(f,i,"Width",r,p),cap:te(f,i,"CapStyle",r,u),join:te(f,i,"JoinStyle",r,y),miterLimit:te(f,i,"MiterLimit",r,h),referenceWidth:s,zOrder:Z(e.name),dashTemplate:null,scaleDash:!1,url:e.url})}function D(e,t,i,o,r,n,a,s){const c=e.primitiveName,f=void 0!==e.width?e.width:4,m=I(e.capStyle),p=w(e.joinStyle),u=e.miterLimit,[y,h]=le(o,c,t,null),g=l(JSON.stringify(e)+h).toString();n.push({type:"line",templateHash:g,materialHash:y?re(g,i,o,r):g,cim:e,materialOverrides:null,isOutline:a,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},width:te(c,i,"Width",r,f),cap:te(c,i,"CapStyle",r,m),join:te(c,i,"JoinStyle",r,p),miterLimit:te(c,i,"MiterLimit",r,u),referenceWidth:s,zOrder:Z(e.name),dashTemplate:null,scaleDash:!1})}function U(e,t,i,o,r,a){const s=e.markerPlacement;if(!s||"CIMMarkerPlacementInsidePolygon"!==s.type)return!1;const c=s,f=Math.abs(c.stepX),m=Math.abs(c.stepY);if(0===f||0===m)return!0;const p=["Rotation","OffsetX","OffsetY"],u=o.filter((t=>t.primitiveName!==e.primitiveName&&!p.includes(t.propertyName))),y="url"in e?e.url:null,[h,S]=le(o,c.primitiveName,t,null),v=l(JSON.stringify(e)+S).toString();let N,b,C=null;if("Random"===s.gridType){const e=n(M),t=Math.max(Math.floor(e/f),1),i=Math.max(Math.floor(e/m),1);N=m*i,C=e=>e?e*i:0;b=t*f/N}else s.shiftOddRows?(N=2*m,C=e=>e?2*e:0,b=.5):(N=m,C=null,b=1);let k={r:255,g:255,b:255,a:1};return"tintColor"in e&&(k=g(e.tintColor)),a.push({type:"fill",templateHash:v,materialHash:h?re(v,i,u,r):v,cim:e,materialOverrides:u,colorLocked:e.colorLocked,effects:t,color:te(c.primitiveName,i,"TintColor",r,k,ee),height:te(c.primitiveName,i,"StepY",r,N,C),scaleX:b,angle:te(c.primitiveName,i,"GridAngle",r,c.gridAngle),offsetX:te(c.primitiveName,i,"OffsetX",r,d(c.offsetX)),offsetY:te(c.primitiveName,i,"OffsetY",r,d(c.offsetY)),url:y,applyRandomOffset:"Random"===s.gridType}),!0}function G(e,t,i,r,n,a,s,c,f){const m=e.primitiveName,p=d(e.size);let u=d(e.scaleX);const y=d(e.rotation),h=d(e.offsetX),S=d(e.offsetY),v=e.tintColor?g(e.tintColor):{r:255,g:255,b:255,a:1},N=l(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString(),b=oe(e.markerPlacement,r,i,n),[C,k]=le(r,m,t,b),O=l(JSON.stringify(e)+k).toString(),M=e.anchorPoint??{x:0,y:0};if("width"in e){const t=e.width;let i=1;const r=a.getResource(e.url);o(r)&&(i=r.width/r.height),u/=i*(p/t)}s.push({type:"marker",templateHash:O,materialHash:C?()=>N:N,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:!1,alignment:c,size:te(m,i,"Size",n,p),scaleX:te(m,i,"ScaleX",n,u),rotation:te(m,i,"Rotation",n,y),offsetX:te(m,i,"OffsetX",n,h),offsetY:te(m,i,"OffsetY",n,S),color:te(m,i,"TintColor",n,v,ee),anchorPoint:{x:M.x,y:-M.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,frameHeight:0,rotateClockwise:e.rotateClockwise,referenceSize:f,sizeRatio:1,markerPlacement:e.markerPlacement,url:e.url})}function B(e,t,i,o,r,n,l,a,s,c){const f=e.markerGraphics;if(!f)return;let m=0;if(e.scaleSymbolsProportionally){const t=e.frame;t&&(m=t.ymax-t.ymin)}const p=oe(e.markerPlacement,o,i,r);for(const u of f)if(u){const f=u.symbol;if(!f)continue;switch(f.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":V(e,t,p,u,o,i,r,n,l,a,s,m,c);break;case"CIMTextSymbol":q(e,t,p,u,i,o,r,n,a,s,m)}}}function q(e,t,i,o,r,n,a,s,m,p,u){const y=[];f.findApplicableOverrides(o,n,y);const h=o.geometry;if(!("x"in h)||!("y"in h))return;const b=o.symbol,C=x(b),k=R(b.fontStyleName),O=P(b.fontFamilyName);b.font={family:O,decoration:C,...k};const M=e.frame,L=h.x-.5*(M.xmin+M.xmax),I=h.y-.5*(M.ymin+M.ymax),w=e.size/u,H=e.primitiveName,J=d(b.height)*w,Y=d(b.angle),A=d(e.offsetX)+(d(b.offsetX)+L)*w,E=d(e.offsetY)+(d(b.offsetY)+I)*w,$=g(c.getFillColor(b));let j=g(c.getStrokeColor(b)),F=c.getStrokeWidth(b);F||(j=g(c.getFillColor(b.haloSymbol)),F=b.haloSize*w);const[T,W]=le(n,H,t,i),D=JSON.stringify(e.effects)+Number(e.colorLocked)+JSON.stringify(e.anchorPoint)+e.anchorPointUnits+JSON.stringify(e.markerPlacement),U=l(JSON.stringify(o)+D+W).toString();let G=te(o.primitiveName,r,"TextString",a,o.textString,S,b.textCase);if(null==G)return;const{fontStyleName:B}=b,q=O+(B?"-"+B.toLowerCase():"-regular"),V=q;"string"==typeof G&&G.includes("[")&&b.fieldMap&&(G=v(b.fieldMap,G,b.textCase)),s.push({type:"text",templateHash:U,materialHash:T||"function"==typeof G||G.match(/\[(.*?)\]/)?(e,t,i)=>V+"-"+N(G,e,t,i):V+"-"+l(G),cim:b,materialOverrides:null,colorLocked:e.colorLocked,effects:t,alignment:m,anchorPoint:{x:e.anchorPoint?e.anchorPoint.x:0,y:e.anchorPoint?e.anchorPoint.y:0},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,fontName:q,decoration:C,weight:te(H,r,"Weight",a,k.weight),style:te(H,r,"Size",a,k.style),size:te(H,r,"Size",a,J),angle:te(H,r,"Rotation",a,Y),offsetX:te(H,r,"OffsetX",a,A),offsetY:te(H,r,"OffsetY",a,E),horizontalAlignment:X(b.horizontalAlignment),verticalAlignment:z(b.verticalAlignment),text:G,color:$,outlineColor:j,outlineSize:F,referenceSize:p,sizeRatio:1,markerPlacement:i})}function V(e,t,i,r,n,a,s,f,m,p,u,S,v){const N=r.symbol,b=N.symbolLayers;if(!b)return;if(v)return void Q(e,t,i,r,a,n,s,f,m,p,u,S);let C=b.length;if(se(b))return void K(e,t,i,r,b,n,a,s,f,p,u,S);const O=k.applyEffects(N.effects,r.geometry,m.geometryEngine);if(O)for(;C--;){const v=b[C];if(v&&!1!==v.enable)switch(v.type){case"CIMSolidFill":case"CIMSolidStroke":{const N=k.applyEffects(v.effects,O,m.geometryEngine),b=y(N);if(!b)continue;const[C,M,P]=h(b,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),L="CIMSolidFill"===v.type,I={type:"sdf",geom:N,asFill:L},w=e.primitiveName,X=d(e.size)??10,z=d(e.rotation),R=d(e.offsetX),x=d(e.offsetY),H=v.path,J=v.primitiveName,Y=g(L?c.getFillColor(v):c.getStrokeColor(v)),A=L?{r:0,g:0,b:0,a:0}:g(c.getStrokeColor(v)),E=c.getStrokeWidth(v);if(!L&&!E)break;let $=!1,j="";for(const e of n)e.primitiveName!==J&&e.primitiveName!==w||(void 0!==e.value?j+=`-${e.primitiveName}-${e.propertyName}-${JSON.stringify(e.value)}`:e.valueExpressionInfo&&($=!0));o(t)&&"function"==typeof t&&($=!0);const F=JSON.stringify({...e,markerGraphics:null}),T=l(JSON.stringify(I)+H).toString(),W={type:"marker",templateHash:l(JSON.stringify(r)+JSON.stringify(v)+F+j).toString(),materialHash:$?()=>T:T,cim:I,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:p,anchorPoint:{x:M,y:P},isAbsoluteAnchorPoint:!1,size:te(e.primitiveName,a,"Size",s,X),rotation:te(e.primitiveName,a,"Rotation",s,z),offsetX:te(e.primitiveName,a,"OffsetX",s,R),offsetY:te(e.primitiveName,a,"OffsetY",s,x),scaleX:1,frameHeight:S,rotateClockwise:e.rotateClockwise,referenceSize:u,sizeRatio:C,color:te(J,a,"Color",s,Y,ee),outlineColor:te(J,a,"Color",s,A,ee),outlineWidth:te(J,a,"Width",s,E),markerPlacement:i,path:H};f.push(W);break}default:Q(e,t,i,r,a,n,s,f,m,p,u,S)}}}function K(e,t,i,o,r,n,a,s,f,m,p,u){const S=o.geometry,v=r[0],N=r[1],b=y(S);if(!b)return;const[C,k,O]=h(b,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),M={type:"sdf",geom:S,asFill:!0},P=e.primitiveName,L=d(e.size),I=d(e.rotation),w=d(e.offsetX),X=d(e.offsetY),z=N.path,R=N.primitiveName,x=v.primitiveName,H=g(c.getFillColor(N)),J=g(c.getStrokeColor(v)),Y=c.getStrokeWidth(v);let A=!1,E="";for(const l of n)l.primitiveName!==R&&l.primitiveName!==x&&l.primitiveName!==P||(void 0!==l.value?E+=`-${l.primitiveName}-${l.propertyName}-${JSON.stringify(l.value)}`:l.valueExpressionInfo&&(A=!0));const $=JSON.stringify({...e,markerGraphics:null}),j=l(JSON.stringify(M)+z).toString(),F={type:"marker",templateHash:l(JSON.stringify(o)+JSON.stringify(N)+JSON.stringify(v)+$+E).toString(),materialHash:A?()=>j:j,cim:M,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:m,anchorPoint:{x:k,y:O},isAbsoluteAnchorPoint:!1,size:te(e.primitiveName,a,"Size",s,L),rotation:te(e.primitiveName,a,"Rotation",s,I),offsetX:te(e.primitiveName,a,"OffsetX",s,w),offsetY:te(e.primitiveName,a,"OffsetY",s,X),scaleX:1,frameHeight:u,rotateClockwise:e.rotateClockwise,referenceSize:p,sizeRatio:C,color:te(R,a,"Color",s,H,ee),outlineColor:te(x,a,"Color",s,J,ee),outlineWidth:te(x,a,"Width",s,Y),markerPlacement:i,path:z};f.push(F)}function Q(e,t,i,n,a,s,f,m,p,u,y,h){const g=_(e,n);let S=[];const v=["Rotation","OffsetX","OffsetY"];S=s.filter((t=>t.primitiveName!==e.primitiveName||!v.includes(t.propertyName)));let N="";for(const o of s)void 0!==o.value&&(N+=`-${o.primitiveName}-${o.propertyName}-${JSON.stringify(o.value)}`);const[b,C,k]=c.getTextureAnchor(g,p),O=e.primitiveName,M=d(e.rotation),P=d(e.offsetX),L=d(e.offsetY),I=l(JSON.stringify(g)+N).toString(),w={type:"marker",templateHash:I,materialHash:S.length>0||o(t)&&"function"==typeof t?re(I,a,S,f):I,cim:g,materialOverrides:S,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:u,anchorPoint:{x:b,y:C},isAbsoluteAnchorPoint:!1,size:e.size,rotation:te(O,a,"Rotation",f,M),offsetX:te(O,a,"OffsetX",f,P),offsetY:te(O,a,"OffsetY",f,L),color:{r:255,g:255,b:255,a:1},outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,scaleX:1,frameHeight:h,rotateClockwise:e.rotateClockwise,referenceSize:y,sizeRatio:k/r(e.size),markerPlacement:i};m.push(w)}function _(e,t){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:[t],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function Z(e){if(e&&0===e.indexOf("Level_")){const t=parseInt(e.substr(6),10);if(!isNaN(t))return t}return 0}function ee(t){if(!t||0===t.length)return null;const i=new e(t).toRgba();return{r:i[0],g:i[1],b:i[2],a:i[3]}}function te(e,t,i,o,r,n,l){const a=t[e];if(a){const e=a[i];if("string"==typeof e||"number"==typeof e||e instanceof Array)return n?n.call(null,e,l):e;if(null!=e&&e instanceof s)return(t,i,a)=>{let s=O(e,t,{$view:a},o.geometryType,i);return null!==s&&n&&(s=n.call(null,s,l)),null!==s?s:r}}return r}function ie(e,i,o,r){for(const t of i){if(t.valueExpressionInfo){const e=o[t.primitiveName]&&o[t.primitiveName][t.propertyName];e instanceof s&&(t.fn=(t,i,o)=>O(e,t,{$view:o},r.geometryType,i))}}const n=e=>e?e.charAt(0).toLowerCase()+e.substr(1):e;return(o,r,l)=>{for(const e of i)e.fn&&(e.value=e.fn(o,r,l));const a=[];for(let s of e){const e=s?.primitiveName;if(e){let o=!1;for(const r of i)if(r.primitiveName===e){const e=n(r.propertyName);null!=r.value&&r.value!==s[e]&&(o||(s=t(s),o=!0),s[e]=r.value)}}a.push(s)}return a}}function oe(e,i,o,r){const n=[];if(f.findApplicableOverrides(e,i,n),0===n.length)return e;for(const t of n){if(t.valueExpressionInfo){const e=o[t.primitiveName]&&o[t.primitiveName][t.propertyName];e instanceof s&&(t.fn=(t,i,o)=>O(e,t,{$view:o},r.geometryType,i))}}const l=e=>e?e.charAt(0).toLowerCase()+e.substr(1):e;return(i,o,r)=>{for(const e of n)e.fn&&(e.value=e.fn(i,o,r));const a=t(e),s=e.primitiveName;for(const e of n)if(e.primitiveName===s){const t=l(e.propertyName);null!=e.value&&e.value!==a[t]&&(a[t]=e.value)}return a}}function re(e,t,i,o){for(const r of i){if(r.valueExpressionInfo){const e=t[r.primitiveName]&&t[r.primitiveName][r.propertyName];e instanceof s&&(r.fn=(t,i,r)=>O(e,t,{$view:r},o.geometryType,i))}}return(t,o,r)=>{for(const e of i)e.fn&&(e.value=e.fn(t,o,r));return l(e+f.buildOverrideKey(i)).toString()}}function ne(e,t){if(!t||0===t.length)return e;const i=JSON.parse(JSON.stringify(e));return f.applyOverrides(i,t),i}function le(e,t,i,r){let n=!1,l="";for(const o of e)o.primitiveName===t&&(void 0!==o.value?l+=`-${o.primitiveName}-${o.propertyName}-${JSON.stringify(o.value)}`:o.valueExpressionInfo&&(n=!0));return o(i)&&"function"==typeof i&&(n=!0),o(r)&&"function"==typeof r&&(n=!0),[n,l]}function ae(e,t,i){if(e&&t)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const o=e.symbolLayers;if(!o)return;for(const e of o)switch(fe(e,t,i),e.type){case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":case"CIMPictureStroke":case"CIMGradientStroke":case"CIMCharacterMarker":case"CIMPictureMarker":"url"in e&&e.url&&i.push(t.fetchResource(e.url,null));break;case"CIMVectorMarker":{const o=e.markerGraphics;if(!o)continue;for(const e of o)if(e){const o=e.symbol;o&&ae(o,t,i)}}}}}}const se=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&!e[0].effects&&!e[1].effects;let ce;function fe(e,t,i){if(!e.effects||o(t.geometryEngine))return;if(ce)return void i.push(ce);b(e.effects)&&(ce=C(),i.push(ce),ce.then((e=>t.geometryEngine=e)))}export{ne as analyzeCIMResource,Y as analyzeCIMSymbol};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{Placement as
|
|
5
|
+
import t from"../../../core/RandomLCG.js";import{Placement as s}from"../CIMPlacements.js";import{PlacementGridType as i}from"../enums.js";function h(t){return void 0!==t.rings}class e{static local(){return null===e.instance&&(e.instance=new e),e.instance}execute(t,s,i,h){return new n(t,s,i,h)}}e.instance=null;class n{constructor(e,n,_,r){if(this._xMin=0,this._xMax=0,this._yMin=0,this._yMax=0,this._currentX=0,this._currentY=0,this._stepX=Math.abs(n.stepX??16)*_,this._stepY=Math.abs(n.stepY??16)*_,0!==this._stepX&&0!==this._stepY&&e&&h(e)&&e.rings){if(this._gridType=n.gridType??i.Fixed,this._gridType===i.Random){const s=n.seed??13,i=1;this._randomLCG=new t(s*i),this._randomness=(n.randomness??100)/100,this._gridAngle=0,this._shiftOddRows=!1,this._cosAngle=1,this._sinAngle=0,this._offsetX=0,this._offsetY=0}else{if(this._randomness=0,this._gridAngle=n.gridAngle??0,this._shiftOddRows=n.shiftOddRows??!1,this._offsetX=(n.offsetX??0)*_,this._offsetY=(n.offsetY??0)*_,this._cosAngle=Math.cos(this._gridAngle/180*Math.PI),this._sinAngle=-Math.sin(this._gridAngle/180*Math.PI),this._stepX)if(this._offsetX<0)for(;this._offsetX<-.5*this._stepX;)this._offsetX+=this._stepX;else for(;this._offsetX>=.5*this._stepX;)this._offsetX-=this._stepX;if(this._stepY)if(this._offsetY<0)for(;this._offsetY<-.5*this._stepY;)this._offsetY+=this._stepY;else for(;this._offsetY>=.5*this._stepY;)this._offsetY-=this._stepY}this._graphicOriginX=0,this._graphicOriginY=0,this._internalPlacement=new s,this._calculateMinMax(e),this._geometry=e}}next(){return this._geometry?this._nextInside():null}_calculateMinMax(t){let s,i,h,e,n,_,r,o;this._xMin=0,this._xMax=0,this._yMin=0,this._yMax=0,n=_=Number.MAX_VALUE,r=o=-Number.MAX_VALUE;for(const a of t.rings){const t=a?a.length:0;for(let f=0;f<t;++f)s=a[f][0]-this._graphicOriginX-this._offsetX,i=a[f][1]-this._graphicOriginY-this._offsetY,h=this._cosAngle*s-this._sinAngle*i,e=this._sinAngle*s+this._cosAngle*i,n=Math.min(n,h),r=Math.max(r,h),_=Math.min(_,e),o=Math.max(o,e)}n+=this._graphicOriginX,r+=this._graphicOriginX,_+=this._graphicOriginY,o+=this._graphicOriginY,this._xMin=Math.round(n/this._stepX),this._xMax=Math.round(r/this._stepX),this._yMin=Math.round(_/this._stepY),this._yMax=Math.round(o/this._stepY),this._currentX=this._xMax+1,this._currentY=this._yMin-1}_nextInside(){for(;;){if(this._currentX>this._xMax){if(this._currentY++,this._currentY>this._yMax)return null;this._currentX=this._xMin,this._shiftOddRows&&this._currentY%2&&this._currentX--}let t=this._currentX*this._stepX+this._offsetX;this._shiftOddRows&&this._currentY%2&&(t+=.5*this._stepX);const s=this._currentY*this._stepY+this._offsetY;let h,e;return this._currentX++,this._gridType===i.Random?(h=this._graphicOriginX+t+this._stepX*this._randomness*(.5-this._randomLCG.getFloat())*2/3,e=this._graphicOriginY+s+this._stepY*this._randomness*(.5-this._randomLCG.getFloat())*2/3):(h=this._graphicOriginX+this._cosAngle*t+this._sinAngle*s,e=this._graphicOriginY-this._sinAngle*t+this._cosAngle*s),this._internalPlacement.setTranslate(h,e),this._internalPlacement}}}export{e as PlacementInsidePolygon};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import r from"./flow/BrushFlow.js";import s from"./imagery/BrushRasterBitmap.js";import e from"./imagery/BrushVectorField.js";import o from"./webgl/brushes/BrushBitmap.js";import l from"./webgl/brushes/BrushClip.js";import
|
|
5
|
+
import r from"./flow/BrushFlow.js";import s from"./imagery/BrushRasterBitmap.js";import e from"./imagery/BrushVectorField.js";import o from"./webgl/brushes/BrushBitmap.js";import l from"./webgl/brushes/BrushClip.js";import t from"./webgl/brushes/BrushOverlay.js";import m from"./webgl/brushes/WGLBrushDotDensity.js";import i from"./webgl/brushes/WGLBrushHeatmap.js";import b from"./webgl/brushes/WGLBrushInfo.js";import h from"./webgl/brushes/WGLBrushPieChart.js";import u from"./webgl/brushes/WGLBrushStencil.js";import{WGLBrushVTLBackground as p}from"./webgl/brushes/WGLBrushVTLBackground.js";import{WGLBrushVTLCircle as f}from"./webgl/brushes/WGLBrushVTLCircle.js";import{WGLBrushVTLFill as B}from"./webgl/brushes/WGLBrushVTLFill.js";import{WGLBrushVTLLine as L}from"./webgl/brushes/WGLBrushVTLLine.js";import{WGLBrushVTLSymbol as a}from"./webgl/brushes/WGLBrushVTLSymbol.js";import g from"./webgl/brushes/WGLGeometryBrushFill.js";import j from"./webgl/brushes/WGLGeometryBrushLabel.js";import w from"./webgl/brushes/WGLGeometryBrushLine.js";import G from"./webgl/brushes/WGLGeometryBrushMarker.js";import n from"./webgl/brushes/WGLGeometryBrushText.js";const W={marker:G,line:w,fill:g,text:n,label:j,clip:l,stencil:u,bitmap:o,overlay:t,raster:s,rasterVF:e,flow:r,tileInfo:b,vtlBackground:p,vtlFill:B,vtlLine:L,vtlCircle:f,vtlSymbol:a,dotDensity:m,heatmap:i,pieChart:h},y={vtlBackground:p,vtlFill:B,vtlLine:L,vtlCircle:f,vtlSymbol:a};export{W as brushes,y as vtlBrushes};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
5
|
+
import e from"../../../../request.js";import t from"../../../../core/pbf.js";class s{constructor(e){if(this._metrics=[],this._bitmaps=[],e)for(;e.next();)switch(e.tag()){case 1:{const t=e.getMessage();for(;t.next();)switch(t.tag()){case 3:{const e=t.getMessage();let s,a,r,n,i,c,g;for(;e.next();)switch(e.tag()){case 1:s=e.getUInt32();break;case 2:a=e.getBytes();break;case 3:r=e.getUInt32();break;case 4:n=e.getUInt32();break;case 5:i=e.getSInt32();break;case 6:c=e.getSInt32();break;case 7:g=e.getUInt32();break;default:e.skip()}e.release(),s&&(this._metrics[s]={width:r,height:n,left:i,top:c,advance:g},this._bitmaps[s]=a);break}default:t.skip()}t.release();break}default:e.skip()}}getMetrics(e){return this._metrics[e]}getBitmap(e){return this._bitmaps[e]}}class a{constructor(){this._ranges=[]}getRange(e){return this._ranges[e]}addRange(e,t){this._ranges[e]=t}}class r{constructor(e){this._glyphInfo={},this._baseURL=e}getRange(a,r){const n=this._getFontStack(a);if(n.getRange(r))return Promise.resolve();const i=256*r,c=i+255;if(this._baseURL){const g=this._baseURL.replace("{fontstack}",a).replace("{range}",i+"-"+c);return e(g,{responseType:"array-buffer"}).then((e=>{n.addRange(r,new s(new t(new Uint8Array(e.data),new DataView(e.data))))})).catch((()=>{n.addRange(r,new s)}))}return n.addRange(r,new s),Promise.resolve()}getGlyph(e,t){const s=this._getFontStack(e);if(!s)return;const a=Math.floor(t/256);if(a>256)return;const r=s.getRange(a);return r?{metrics:r.getMetrics(t),bitmap:r.getBitmap(t)}:void 0}_getFontStack(e){let t=this._glyphInfo[e];return t||(t=this._glyphInfo[e]=new a),t}}export{r as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{createExpression as e}from"../expression/expression.js";import{BooleanType as r}from"../expression/types.js";class t{constructor(e){this._expression=e}filter(e,r){if(!this._expression)return!0;try{return this._expression.evaluate(e,r)}catch(t){return console.log(t.message),!0}}static createFilter(n){if(!n)return null;this.isLegacyFilter(n)&&(n=this.convertLegacyFilter(n));try{const s=e(n,null,r);return new t(s)}catch(s){return console.log(s.message),null}}static isLegacyFilter(e){if(!Array.isArray(e))return!0;if(0===e.length)return!0;switch(e[0]){case"==":case"!=":case">":case"<":case">=":case"<=":return 3===e.length&&"string"==typeof e[1]&&!Array.isArray(e[2]);case"in":return e.length>=3&&"string"==typeof e[1]&&!Array.isArray(e[2]);case"!in":case"none":case"!has":return!0;case"any":case"all":for(let r=1;r<e.length;r++)if(
|
|
5
|
+
import{createExpression as e}from"../expression/expression.js";import{BooleanType as r}from"../expression/types.js";class t{constructor(e){this._expression=e}filter(e,r){if(!this._expression)return!0;try{return this._expression.evaluate(e,r)}catch(t){return console.log(t.message),!0}}static createFilter(n){if(!n)return null;this.isLegacyFilter(n)&&(n=this.convertLegacyFilter(n));try{const s=e(n,null,r);return new t(s)}catch(s){return console.log(s.message),null}}static isLegacyFilter(e){if(!Array.isArray(e))return!0;if(0===e.length)return!0;switch(e[0]){case"==":case"!=":case">":case"<":case">=":case"<=":return 3===e.length&&"string"==typeof e[1]&&!Array.isArray(e[2]);case"in":return e.length>=3&&"string"==typeof e[1]&&!Array.isArray(e[2]);case"!in":case"none":case"!has":return!0;case"any":case"all":for(let r=1;r<e.length;r++)if(this.isLegacyFilter(e[r]))return!0;return!1;case"has":return 2===e.length&&("$id"===e[1]||"$type"===e[1]);default:return!1}}static convertLegacyFilter(e){if(!Array.isArray(e)||0===e.length)return!0;const r=e[0];if(1===e.length)return"any"!==r;switch(r){case"==":return t.convertComparison("==",e[1],e[2]);case"!=":return t.negate(t.convertComparison("==",e[1],e[2]));case">":case"<":case">=":case"<=":return t.convertComparison(r,e[1],e[2]);case"in":return t.convertIn(e[1],e.slice(2));case"!in":return t.negate(t.convertIn(e[1],e.slice(2)));case"any":case"all":case"none":return t.convertCombining(r,e.slice(1));case"has":return t.convertHas(e[1]);case"!has":return t.negate(t.convertHas(e[1]));default:throw new Error("Unexpected legacy filter.")}}static convertComparison(e,r,t){switch(r){case"$type":return[e,["geometry-type"],t];case"$id":return[e,["id"],t];default:return[e,["get",r],t]}}static convertIn(e,r){switch(e){case"$type":return["in",["geometry-type"],["literal",r]];case"$id":return["in",["id"],["literal",r]];default:return["in",["get",e],["literal",r]]}}static convertHas(e){switch(e){case"$type":return!0;case"$id":return["has-id"];default:return["has",e]}}static convertCombining(e,r){return[e].concat(r.map(this.convertLegacyFilter))}static negate(e){return["!",e]}}export{t as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{StyleLayerType as e}from"./StyleDefinition.js";import{CircleStyleLayer as t,SymbolStyleLayer as r,LineStyleLayer as s,FillStyleLayer as i,BackgroundStyleLayer as a}from"./StyleLayer.js";class l{constructor(t){if(this._style=t,this.backgroundBucketIds=[],this._uidToLayer=new Map,this._layerByName={},this._runningId=0,t.layers||(t.layers=[]),this.version=parseFloat(t.version),this.layers=t.layers.map(((e,t,r)=>this._create(e,t,r))),this.layers){let t;for(let r=0;r<this.layers.length;r++)t=this.layers[r],this._layerByName[t.id]=t,this._uidToLayer.set(t.uid,t),t.type===e.BACKGROUND&&this.backgroundBucketIds.push(t.id)}this._identifyRefLayers()}isPainterDataDriven(e){const t=this._layerByName[e];return!!t&&t.isPainterDataDriven()}getStyleLayerId(e){return e>=this.layers.length?null:this.layers[e].id}getStyleLayerByUID(e){return this._uidToLayer.get(e)??null}getStyleLayerIndex(e){const t=this._layerByName[e];return t?this.layers.indexOf(t):-1}setStyleLayer(e,t){if(!e||!e.id)return;const r=this._style;null!=t&&t>=this.layers.length&&(t=this.layers.length-1);let s,i=!0;const a=this._layerByName[e.id];if(a){const y=this.layers.indexOf(a);t||(t=y),t===y?(i=!1,s=l._recreateLayer(e,a),this.layers[t]=s,r.layers[t]=e):(this.layers.splice(y,1),r.layers.splice(y,1),s=this._create(e,t,this.layers),this.layers.splice(t,0,s),r.layers.splice(t,0,e))}else s=this._create(e,t,this.layers),!t||t>=this.layers.length?(this.layers.push(s),r.layers.push(e)):(this.layers.splice(t,0,s),r.layers.splice(t,0,e));this._layerByName[e.id]=s,this._uidToLayer.set(s.uid,s),i&&this._recomputeZValues(),this._identifyRefLayers()}getStyleLayer(e){const t=this._layerByName[e];return t?{type:t.typeName,id:t.id,source:t.source,"source-layer":t.sourceLayer,minzoom:t.minzoom,maxzoom:t.maxzoom,filter:t.filter,layout:t.layout,paint:t.paint}:null}deleteStyleLayer(e){const t=this._layerByName[e];if(t){delete this._layerByName[e],this._uidToLayer.delete(t.uid);const r=this.layers.indexOf(t);this.layers.splice(r,1),this._style.layers.splice(r,1),this._recomputeZValues(),this._identifyRefLayers()}}getLayerById(e){return this._layerByName[e]}getLayoutProperties(e){const t=this._layerByName[e];return t?t.layout:null}getPaintProperties(e){const t=this._layerByName[e];return t?t.paint:null}setPaintProperties(e,t){const r=this._layerByName[e];if(!r)return;const s={type:r.typeName,id:r.id,source:r.source,"source-layer":r.sourceLayer,minzoom:r.minzoom,maxzoom:r.maxzoom,filter:r.filter,layout:r.layout,paint:t},i=l._recreateLayer(s,r),a=this.layers.indexOf(r);this.layers[a]=i,this._style.layers[a].paint=t,this._layerByName[r.id]=i,this._uidToLayer.set(r.uid,i)}setLayoutProperties(e,t){const r=this._layerByName[e];if(!r)return;const s={type:r.typeName,id:r.id,source:r.source,"source-layer":r.sourceLayer,minzoom:r.minzoom,maxzoom:r.maxzoom,filter:r.filter,layout:t,paint:r.paint},i=l._recreateLayer(s,r),a=this.layers.indexOf(r);this.layers[a]=i,this._style.layers[a].layout=t,this._layerByName[r.id]=i,this._uidToLayer.set(r.uid,i)}setStyleLayerVisibility(e,t){const r=this._layerByName[e];if(!r)return;const s=r.layout||{};s.visibility=t;const i={type:r.typeName,id:r.id,source:r.source,"source-layer":r.sourceLayer,minzoom:r.minzoom,maxzoom:r.maxzoom,filter:r.filter,layout:s,paint:r.paint},a=l._recreateLayer(i,r),y=this.layers.indexOf(r);this.layers[y]=a,this._style.layers[y].layout=s,this._layerByName[r.id]=a,this._uidToLayer.set(r.uid,a)}getStyleLayerVisibility(e){const t=this._layerByName[e];if(!t)return"none";return t.layout?.visibility??"visible"}_recomputeZValues(){const e=this.layers,t=1/(e.length+1);for(let r=0;r<e.length;r++)e[r].z=1-(1+r)*t}_identifyRefLayers(){const t=[],r=[];let s=0;for(const i of this.layers){const a=i.layout;if(i.type===e.FILL){const e=i;let r=i.source+"|"+i.sourceLayer;r+="|"+a?.visibility??"",r+="|"+i.minzoom,r+="|"+i.maxzoom,r+="|"+JSON.stringify(i.filter),(e.hasDataDrivenFill||e.hasDataDrivenOutline)&&(r+="|"+s),t.push({key:r,layer:i})}else if(i.type===e.LINE){const e=i;let t=i.source+"|"+i.sourceLayer;t+="|"+a?.visibility??"",t+="|"+i.minzoom,t+="|"+i.maxzoom,t+="|"+JSON.stringify(i.filter),t+="|"+(void 0!==a?a["line-cap"]:""),t+="|"+(void 0!==a?a["line-join"]:""),e.hasDataDrivenLine&&(t+="|"+s),r.push({key:t,layer:i})}++s}this._assignRefLayers(t),this._assignRefLayers(r)}_assignRefLayers(t){let r,s;t.sort(((e,t)=>e.key<t.key?-1:e.key>t.key?1:0));const i=t.length;for(let a=0;a<i;a++){const l=t[a];if(l.key===r)l.layer.refLayerId=s;else if(r=l.key,s=l.layer.id,l.layer.type===e.FILL){if(!l.layer.getPaintProperty("fill-outline-color"))for(let e=a+1;e<i;e++){const i=t[e];if(i.key!==r)break;if(i.layer.getPaintProperty("fill-outline-color")){t[a]=i,t[e]=l,s=i.layer.id;break}}}else if(l.layer.type===e.LINE){let e=l.layer;for(let y=a+1;y<i;y++){const i=t[y];if(i.key!==r)break;const n=i.layer;(e.canUseThinTessellation&&!n.canUseThinTessellation||!e.canUseThinTessellation&&(n.getPaintProperty("line-pattern")||n.getPaintProperty("line-dasharray")))&&(e=n,t[a]=i,t[y]=l,s=i.layer.id)}}}}_create(l,y,n){const o=1-(1+y)*(1/(n.length+1)),u=this._runningId++;switch(l.type){case"background":return new a(e.BACKGROUND,l,o,u);case"fill":return new i(e.FILL,l,o,u);case"line":return new s(e.LINE,l,o,u);case"symbol":return new r(e.SYMBOL,l,o,u);case"raster":
|
|
5
|
+
import{StyleLayerType as e}from"./StyleDefinition.js";import{CircleStyleLayer as t,SymbolStyleLayer as r,LineStyleLayer as s,FillStyleLayer as i,BackgroundStyleLayer as a}from"./StyleLayer.js";class l{constructor(t){if(this._style=t,this.backgroundBucketIds=[],this._uidToLayer=new Map,this._layerByName={},this._runningId=0,t.layers||(t.layers=[]),this.version=parseFloat(t.version),this.layers=t.layers.map(((e,t,r)=>this._create(e,t,r))).filter((e=>!!e)),this.layers){let t;for(let r=0;r<this.layers.length;r++)t=this.layers[r],this._layerByName[t.id]=t,this._uidToLayer.set(t.uid,t),t.type===e.BACKGROUND&&this.backgroundBucketIds.push(t.id)}this._identifyRefLayers()}isPainterDataDriven(e){const t=this._layerByName[e];return!!t&&t.isPainterDataDriven()}getStyleLayerId(e){return e>=this.layers.length?null:this.layers[e].id}getStyleLayerByUID(e){return this._uidToLayer.get(e)??null}getStyleLayerIndex(e){const t=this._layerByName[e];return t?this.layers.indexOf(t):-1}setStyleLayer(e,t){if(!e||!e.id)return;const r=this._style;null!=t&&t>=this.layers.length&&(t=this.layers.length-1);let s,i=!0;const a=this._layerByName[e.id];if(a){const y=this.layers.indexOf(a);t||(t=y),t===y?(i=!1,s=l._recreateLayer(e,a),this.layers[t]=s,r.layers[t]=e):(this.layers.splice(y,1),r.layers.splice(y,1),s=this._create(e,t,this.layers),this.layers.splice(t,0,s),r.layers.splice(t,0,e))}else s=this._create(e,t,this.layers),!t||t>=this.layers.length?(this.layers.push(s),r.layers.push(e)):(this.layers.splice(t,0,s),r.layers.splice(t,0,e));this._layerByName[e.id]=s,this._uidToLayer.set(s.uid,s),i&&this._recomputeZValues(),this._identifyRefLayers()}getStyleLayer(e){const t=this._layerByName[e];return t?{type:t.typeName,id:t.id,source:t.source,"source-layer":t.sourceLayer,minzoom:t.minzoom,maxzoom:t.maxzoom,filter:t.filter,layout:t.layout,paint:t.paint}:null}deleteStyleLayer(e){const t=this._layerByName[e];if(t){delete this._layerByName[e],this._uidToLayer.delete(t.uid);const r=this.layers.indexOf(t);this.layers.splice(r,1),this._style.layers.splice(r,1),this._recomputeZValues(),this._identifyRefLayers()}}getLayerById(e){return this._layerByName[e]}getLayoutProperties(e){const t=this._layerByName[e];return t?t.layout:null}getPaintProperties(e){const t=this._layerByName[e];return t?t.paint:null}setPaintProperties(e,t){const r=this._layerByName[e];if(!r)return;const s={type:r.typeName,id:r.id,source:r.source,"source-layer":r.sourceLayer,minzoom:r.minzoom,maxzoom:r.maxzoom,filter:r.filter,layout:r.layout,paint:t},i=l._recreateLayer(s,r),a=this.layers.indexOf(r);this.layers[a]=i,this._style.layers[a].paint=t,this._layerByName[r.id]=i,this._uidToLayer.set(r.uid,i)}setLayoutProperties(e,t){const r=this._layerByName[e];if(!r)return;const s={type:r.typeName,id:r.id,source:r.source,"source-layer":r.sourceLayer,minzoom:r.minzoom,maxzoom:r.maxzoom,filter:r.filter,layout:t,paint:r.paint},i=l._recreateLayer(s,r),a=this.layers.indexOf(r);this.layers[a]=i,this._style.layers[a].layout=t,this._layerByName[r.id]=i,this._uidToLayer.set(r.uid,i)}setStyleLayerVisibility(e,t){const r=this._layerByName[e];if(!r)return;const s=r.layout||{};s.visibility=t;const i={type:r.typeName,id:r.id,source:r.source,"source-layer":r.sourceLayer,minzoom:r.minzoom,maxzoom:r.maxzoom,filter:r.filter,layout:s,paint:r.paint},a=l._recreateLayer(i,r),y=this.layers.indexOf(r);this.layers[y]=a,this._style.layers[y].layout=s,this._layerByName[r.id]=a,this._uidToLayer.set(r.uid,a)}getStyleLayerVisibility(e){const t=this._layerByName[e];if(!t)return"none";return t.layout?.visibility??"visible"}_recomputeZValues(){const e=this.layers,t=1/(e.length+1);for(let r=0;r<e.length;r++)e[r].z=1-(1+r)*t}_identifyRefLayers(){const t=[],r=[];let s=0;for(const i of this.layers){const a=i.layout;if(i.type===e.FILL){const e=i;let r=i.source+"|"+i.sourceLayer;r+="|"+a?.visibility??"",r+="|"+i.minzoom,r+="|"+i.maxzoom,r+="|"+JSON.stringify(i.filter),(e.hasDataDrivenFill||e.hasDataDrivenOutline)&&(r+="|"+s),t.push({key:r,layer:i})}else if(i.type===e.LINE){const e=i;let t=i.source+"|"+i.sourceLayer;t+="|"+a?.visibility??"",t+="|"+i.minzoom,t+="|"+i.maxzoom,t+="|"+JSON.stringify(i.filter),t+="|"+(void 0!==a?a["line-cap"]:""),t+="|"+(void 0!==a?a["line-join"]:""),e.hasDataDrivenLine&&(t+="|"+s),r.push({key:t,layer:i})}++s}this._assignRefLayers(t),this._assignRefLayers(r)}_assignRefLayers(t){let r,s;t.sort(((e,t)=>e.key<t.key?-1:e.key>t.key?1:0));const i=t.length;for(let a=0;a<i;a++){const l=t[a];if(l.key===r)l.layer.refLayerId=s;else if(r=l.key,s=l.layer.id,l.layer.type===e.FILL){if(!l.layer.getPaintProperty("fill-outline-color"))for(let e=a+1;e<i;e++){const i=t[e];if(i.key!==r)break;if(i.layer.getPaintProperty("fill-outline-color")){t[a]=i,t[e]=l,s=i.layer.id;break}}}else if(l.layer.type===e.LINE){let e=l.layer;for(let y=a+1;y<i;y++){const i=t[y];if(i.key!==r)break;const n=i.layer;(e.canUseThinTessellation&&!n.canUseThinTessellation||!e.canUseThinTessellation&&(n.getPaintProperty("line-pattern")||n.getPaintProperty("line-dasharray")))&&(e=n,t[a]=i,t[y]=l,s=i.layer.id)}}}}_create(l,y,n){const o=1-(1+y)*(1/(n.length+1)),u=this._runningId++;switch(l.type){case"background":return new a(e.BACKGROUND,l,o,u);case"fill":return new i(e.FILL,l,o,u);case"line":return new s(e.LINE,l,o,u);case"symbol":return new r(e.SYMBOL,l,o,u);case"raster":console.warn(`Unsupported vector tile raster layer ${l.id}`);case"circle":return new t(e.CIRCLE,l,o,u)}}static _recreateLayer(l,y){switch(l.type){case"background":return new a(e.BACKGROUND,l,y.z,y.uid);case"fill":return new i(e.FILL,l,y.z,y.uid);case"line":return new s(e.LINE,l,y.z,y.uid);case"symbol":return new r(e.SYMBOL,l,y.z,y.uid);case"raster":console.warn(`Unsupported vector tile raster layer ${l.id}`);case"circle":return new t(e.CIRCLE,l,y.z,y.uid)}}}export{l as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import t from"../../../../core/Error.js";import e from"../../../../core/has.js";import i from"../../../../core/Logger.js";import{isNone as s,mapMany as r,isSome as a,applySome as h,unwrap as d,forEachSome as n,mapOr as o,unwrapOr as u}from"../../../../core/maybe.js";import{createResolver as l}from"../../../../core/promiseUtils.js";import{ATTRIBUTE_DATA_VV as p,TEXTURE_BINDING_ATTRIBUTE_DATA_0 as x,TEXTURE_BINDING_ATTRIBUTE_DATA_1 as _,TEXTURE_BINDING_ATTRIBUTE_DATA_2 as c,TEXTURE_BINDING_ATTRIBUTE_DATA_3 as g,
|
|
5
|
+
import t from"../../../../core/Error.js";import e from"../../../../core/has.js";import i from"../../../../core/Logger.js";import{isNone as s,mapMany as r,isSome as a,applySome as h,unwrap as d,forEachSome as n,mapOr as o,unwrapOr as u}from"../../../../core/maybe.js";import{createResolver as l}from"../../../../core/promiseUtils.js";import{ATTRIBUTE_DATA_VV as p,TEXTURE_BINDING_ATTRIBUTE_DATA_0 as x,TEXTURE_BINDING_ATTRIBUTE_DATA_1 as _,TEXTURE_BINDING_ATTRIBUTE_DATA_2 as c,TEXTURE_BINDING_ATTRIBUTE_DATA_3 as g,TEXTURE_BINDING_ATTRIBUTE_DATA_4 as T,TEXTURE_BINDING_ATTRIBUTE_DATA_5 as f,TEXTURE_BINDING_GPGPU as b,ATTRIBUTE_DATA_FILTER_FLAGS as m,ATTRIBUTE_DATA_GPGPU as y,ATTRIBUTE_DATA_ANIMATION as w,ATTRIBUTE_DATA_DD1 as z}from"./definitions.js";import{getDisplayIdTexel as E}from"./DisplayId.js";import{getPixelArrayCtor as U,getPixelBytes as D}from"./Utils.js";import{createDebugLogger as S,DEBUG_ATTR_UPDATES as A}from"./util/debug.js";import{TextureWrapMode as j,PixelFormat as k,PixelType as M,TextureSamplingMode as N,TextureType as O,TargetType as F,DepthStencilTargetType as R}from"../../../webgl/enums.js";import{FramebufferObject as v}from"../../../webgl/FramebufferObject.js";import{Texture as B}from"../../../webgl/Texture.js";const V=i.getLogger("esri.views.2d.engine.webgl.AttributeStoreView"),L=S(A,V);class G{constructor(t,e,i){this._texture=null,this._lastTexture=null,this._fbos={},this.texelSize=4;const{buffer:s,pixelType:r,textureOnly:a}=t,h=U(r);this.shared=i,this.pixelType=r,this.size=e,this.textureOnly=a,a||(this.data=new h(d(s))),this._resetRange()}destroy(){h(this._texture,(t=>t.dispose()));for(const t in this._fbos)h(this._fbos[t],(e=>{"0"===t&&e.detachColorTexture(),e.dispose()})),this._fbos[t]=null;this._texture=null}get _textureDesc(){return{target:O.TEXTURE_2D,wrapMode:j.CLAMP_TO_EDGE,pixelFormat:k.RGBA,dataType:this.pixelType,samplingMode:N.NEAREST,width:this.size,height:this.size}}setData(t,e,i){const s=E(t),r=d(this.data),a=s*this.texelSize+e;!r||a>=r.length||(r[a]=i,this.dirtyStart=Math.min(this.dirtyStart,s),this.dirtyEnd=Math.max(this.dirtyEnd,s))}getData(t,e){if(s(this.data))return null;const i=E(t)*this.texelSize+e;return!this.data||i>=this.data.length?null:this.data[i]}getTexture(t){return u(this._texture,(()=>this._initTexture(t)))}getFBO(t,e=0){if(s(this._fbos[e])){const i={colorTarget:F.TEXTURE,depthStencilTarget:R.NONE},s=0===e?this.getTexture(t):this._textureDesc;this._fbos[e]=new v(t,i,s)}return this._fbos[e]}get locked(){return!(this.pixelType!==M.UNSIGNED_BYTE||!this.shared||this.textureOnly||!e("esri-atomics")||!this.data)&&1===Atomics.load(this.data,0)}get hasDirty(){const t=this.dirtyStart;return this.dirtyEnd>=t}updateTexture(e,i){if(!this.locked){try{const i=this.dirtyStart,s=this.dirtyEnd;if(!this.hasDirty)return;this._resetRange();const r=d(this.data).buffer,a=this.getTexture(e),h=4,n=(i-i%this.size)/this.size,o=(s-s%this.size)/this.size,u=n,l=this.size,p=o,x=n*this.size*h,_=(l+p*this.size)*h-x,c=U(this.pixelType),g=new c(r,x*c.BYTES_PER_ELEMENT,_),T=this.size,f=p-u+1;if(f>this.size)return void V.error(new t("mapview-webgl","Out-of-bounds index when updating AttributeData"));a.updateData(0,0,u,T,f,g)}catch(s){}i()}}update(t){const{data:e,start:i,end:s}=t;if(a(e)){const s=this.data,r=i*this.texelSize;for(let i=0;i<e.length;i++){const a=1<<i%this.texelSize;t.layout&a&&(s[r+i]=e[i])}}this.dirtyStart=Math.min(this.dirtyStart,i),this.dirtyEnd=Math.max(this.dirtyEnd,s)}resize(t,e){const i=this.size;if(this.size=e,this.textureOnly)return void(i!==this.size&&(this._lastTexture=this._texture,this._texture=null));const s=U(this.pixelType);this.destroy(),this.data=new s(d(t.buffer))}_resetRange(){this.dirtyStart=2147483647,this.dirtyEnd=0}_initTexture(t){const e=new B(t,this._textureDesc,u(this.data,void 0));if(a(this._lastTexture)&&this._fbos[0]){const i=this._lastTexture.descriptor.width,s=this._lastTexture.descriptor.height,r=this._lastTexture.descriptor.dataType,a=this._lastTexture.descriptor.pixelFormat,h=this.getFBO(t),d=D(r),n=new(U(r))(new ArrayBuffer(i*s*d*this.texelSize)),o=t.getBoundFramebufferObject(),{x:u,y:l,width:p,height:x}=t.getViewport();t.bindFramebuffer(h),h.readPixels(0,0,i,s,a,r,n),e.updateData(0,0,0,2*i,s/2,n),t.setViewport(u,l,p,x),t.bindFramebuffer(o)}return this.destroy(),this._texture=e,this._texture}}class P{constructor(t){this._onUpdate=t,this._initialized=!1,this._forceNextUpload=!1,this._locked=!1}initialize(t){const{blocks:e,shared:i,size:h}=t;if(this.shared=i,this.size=h,L("Initializing AttributeStoreView",t),s(this._data))this._data=r(e,(t=>new G(t,h,i)));else for(let r=0;r<this._data.length;r++){const t=this._data[r],d=e[r];a(d)&&(s(t)?this._data[r]=new G(d,h,i):t.resize(d,h))}this._initialized=!0}destroy(){h(this._data,(t=>r(t,(t=>t.destroy())))),h(this._defaultTexture,(t=>t.dispose()))}isEmpty(){const t=this._data;return s(t)}isUpdating(){const t=a(this._pendingAttributeUpdate),i=t;return e("esri-2d-log-updating")&&console.log(`Updating AttributeStoreView ${i}\n -> hasPendingUpdate ${t}`),i}getBlock(t){if(s(this._data))return null;return this._data[t]}setLabelMinZoom(t,e){this.setData(t,0,1,e)}getLabelMinZoom(t){return this.getData(t,0,1,255)}getFilterFlags(t){return this.getData(t,0,0,0)}getVVSize(t){return this.getData(t,p,0,0)}getData(t,e,i,r){if(!this._data)return 0;const h=d(this._data)[e];if(s(h))return 0;const n=h.getData(t,i);return a(n)?n:r}setData(t,e,i,s){const r=d(this._data)[e];d(r).setData(t,i,s)}lockTextureUpload(){this._locked=!0}unlockTextureUpload(){this._locked=!1}forceTextureUpload(){this._forceNextUpload=!0}async requestUpdate(e){if(this._pendingAttributeUpdate)return void V.error(new t("mapview-webgl","Tried to update attribute data with a pending update"));const i=l();return L("AttributeStoreView Update Requested",e),this._pendingAttributeUpdate={data:e,resolver:i},i.promise}update(){if(this._initialized&&a(this._pendingAttributeUpdate)){const{data:t,resolver:e}=this._pendingAttributeUpdate,i=d(this._data);for(let s=0;s<t.blocks.length;s++){const e=t.blocks[s],r=i[s];h(r,(t=>h(e,(e=>{L(`Updating block ${s}`,e),t.update(e)}))))}this._pendingAttributeUpdate=null,e(),this._onUpdate()}}bindTextures(t,e=!0){this.update();const i=this._getDefaultTexture(t);if(!this._initialized)return t.bindTexture(i,x),void(e&&(t.bindTexture(i,_),t.bindTexture(i,c),t.bindTexture(i,g),t.bindTexture(i,T),t.bindTexture(i,f),t.bindTexture(i,b)));const s=d(this._data);this._locked&&!this._forceNextUpload||(n(s,(e=>e.updateTexture(t,(()=>this._onUpdate())))),this._forceNextUpload=!1),t.bindTexture(o(s[m],i,(e=>e.getTexture(t))),x),e&&(t.bindTexture(o(s[y],i,(e=>e.getTexture(t))),b),t.bindTexture(o(s[w],i,(e=>e.getTexture(t))),_),t.bindTexture(o(s[p],i,(e=>e.getTexture(t))),c),t.bindTexture(o(s[z],i,(e=>e.getTexture(t))),g),t.bindTexture(o(s[T],i,(e=>e.getTexture(t))),T),t.bindTexture(o(s[f],i,(e=>e.getTexture(t))),f))}_getDefaultTexture(t){if(s(this._defaultTexture)){const e={wrapMode:j.CLAMP_TO_EDGE,pixelFormat:k.RGBA,dataType:M.UNSIGNED_BYTE,samplingMode:N.NEAREST,width:1,height:1};this._defaultTexture=new B(t,e,new Uint8Array(4))}return this._defaultTexture}}export{P as AttributeStoreView};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{isSome as e,isNone as t,disposeMaybe as s}from"../../../../core/maybe.js";import{brushes as r}from"../brushes.js";import i from"../vectorTiles/shaders/VTLMaterialManager.js";import{BitBlitRenderer as n}from"./BitBlitRenderer.js";import{WGLDrawPhase as o,WGLGeometryType as a,WGLSymbologyType as h}from"./enums.js";import l from"./MaterialManager.js";import f from"./TextureManager.js";import{WorldExtentClipRenderer as c}from"./WorldExtentClipRenderer.js";import{AnimationEffect as _}from"./effects/AnimationEffect.js";import{BlendEffect as d}from"./effects/BlendEffect.js";import{FeatureEffect as
|
|
5
|
+
import{isSome as e,isNone as t,disposeMaybe as s}from"../../../../core/maybe.js";import{brushes as r}from"../brushes.js";import i from"../vectorTiles/shaders/VTLMaterialManager.js";import{BitBlitRenderer as n}from"./BitBlitRenderer.js";import{WGLDrawPhase as o,WGLGeometryType as a,WGLSymbologyType as h}from"./enums.js";import l from"./MaterialManager.js";import f from"./TextureManager.js";import{WorldExtentClipRenderer as c}from"./WorldExtentClipRenderer.js";import{AnimationEffect as _}from"./effects/AnimationEffect.js";import{BlendEffect as d}from"./effects/BlendEffect.js";import{FeatureEffect as E}from"./effects/FeatureEffect.js";import b from"./effects/HighlightEffect.js";import{HittestEffect as u}from"./effects/HittestEffect.js";import{HittestEffectVTL as p}from"./effects/HittestEffectVTL.js";import{EffectManager as g}from"./effects/post-processing/EffectManager.js";import T from"./painter/RenderPass.js";import{TextureType as m,PixelFormat as C,PixelType as M,TextureSamplingMode as R,TextureWrapMode as F,TargetType as w,DepthStencilTargetType as B,RenderbufferFormat as S,BlendFactor as O,CompareFunction as P}from"../../../webgl/enums.js";import{FramebufferObject as x}from"../../../webgl/FramebufferObject.js";import{Renderbuffer as L}from"../../../webgl/Renderbuffer.js";function N(e,t){switch(e){case a.LINE:return r.line;case a.TEXT:return r.text;case a.LABEL:return r.label;case a.FILL:return t===h.DOT_DENSITY?r.dotDensity:r.fill;case a.MARKER:switch(t){case h.HEATMAP:return r.heatmap;case h.PIE_CHART:return r.pieChart;default:return r.marker}}}class D{constructor(e,t,s){this.context=e,this._blitRenderer=new n,this._worldExtentClipRenderer=new c,this._isClippedToWorldExtent=!1,this._brushCache=new Map,this._vtlMaterialManager=new i,this._blendEffect=new d,this._fboPool=[],this.effects={highlight:new b,hittest:new u,hittestVTL:new p,integrate:new _,insideEffect:new E("inside"),outsideEffect:new E("outside")},this.materialManager=new l(e),this.textureManager=new f(t,s),this._effectsManager=new g}get vectorTilesMaterialManager(){return this._vtlMaterialManager}getRenderTarget(){return this._renderTarget}setRenderTarget(e){this._renderTarget=e}getFbos(e,t){if(e!==this._lastWidth||t!==this._lastHeight){if(this._lastWidth=e,this._lastHeight=t,this._fbos){for(const s in this._fbos)this._fbos[s].resize(e,t);return this._fbos}const s={target:m.TEXTURE_2D,pixelFormat:C.RGBA,dataType:M.UNSIGNED_BYTE,samplingMode:R.NEAREST,wrapMode:F.CLAMP_TO_EDGE,width:e,height:t},r={colorTarget:w.TEXTURE,depthStencilTarget:B.DEPTH_STENCIL_RENDER_BUFFER},i=new L(this.context,{width:e,height:t,internalFormat:S.DEPTH_STENCIL});this._stencilBuf=i,this._fbos={output:new x(this.context,r,s,i),blend:new x(this.context,r,s,i),effect0:new x(this.context,r,s,i)}}return this._fbos}acquireFbo(e,t){let s;s=this._fboPool.length>0?this._fboPool.pop():new x(this.context,{colorTarget:w.TEXTURE,depthStencilTarget:B.DEPTH_STENCIL_RENDER_BUFFER},{target:m.TEXTURE_2D,pixelFormat:C.RGBA,dataType:M.UNSIGNED_BYTE,samplingMode:R.NEAREST,wrapMode:F.CLAMP_TO_EDGE,width:e,height:t},this._stencilBuf);const r=s.descriptor;return r.width===e&&r.height===t||s.resize(e,t),s}releaseFbo(e){this._fboPool.push(e)}getSharedStencilBuffer(){return this._stencilBuf}beforeRenderLayers(t,s=null){const{width:r,height:i}=t.getViewport();this._prevFBO=t.getBoundFramebufferObject();const n=this.getFbos(r,i);if(t.bindFramebuffer(n.output),t.setColorMask(!0,!0,!0,!0),e(s)){const{r:e,g:r,b:i,a:n}=s.color;t.setClearColor(n*e/255,n*r/255,n*i/255,n)}else t.setClearColor(0,0,0,0);t.setDepthWriteEnabled(!0),t.setClearDepth(1),t.clear(t.gl.COLOR_BUFFER_BIT|t.gl.DEPTH_BUFFER_BIT),t.setDepthWriteEnabled(!1)}beforeRenderLayer(e,t,s){const{context:r,blendMode:i,effects:n,requireFBO:o,drawPhase:a}=e;if(o||I(a,i,n,s))r.bindFramebuffer(this._fbos.blend),r.setColorMask(!0,!0,!0,!0),r.setClearColor(0,0,0,0),r.setDepthWriteEnabled(!0),r.setClearDepth(1),r.clear(r.gl.COLOR_BUFFER_BIT|r.gl.DEPTH_BUFFER_BIT),r.setDepthWriteEnabled(!1);else{const e=this._getOutputFBO();r.bindFramebuffer(e)}r.setDepthWriteEnabled(!1),r.setDepthTestEnabled(!1),r.setStencilTestEnabled(!0),r.setClearStencil(t),r.setStencilWriteMask(255),r.clear(r.gl.STENCIL_BUFFER_BIT)}compositeLayer(s,r){const{context:i,blendMode:n,effects:a,requireFBO:h,drawPhase:l}=s;if(h||I(l,n,a,r)){e(a)&&a.length>0&&l===o.MAP&&this._applyEffects(s,a);const h=this._getOutputFBO();i.bindFramebuffer(h),i.setStencilTestEnabled(!1),i.setStencilWriteMask(0),i.setBlendingEnabled(!0),i.setBlendFunctionSeparate(O.ONE,O.ONE_MINUS_SRC_ALPHA,O.ONE,O.ONE_MINUS_SRC_ALPHA),i.setColorMask(!0,!0,!0,!0);const f=t(n)||l===o.HIGHLIGHT?"normal":n;this._blendEffect.draw(s,this._fbos.blend.colorTexture,R.NEAREST,f,r)}}renderLayers(e){if(e.bindFramebuffer(this._prevFBO),!this._fbos)return;const t=this._getOutputFBO();e.setDepthTestEnabled(!1),e.setStencilWriteMask(0),this._isClippedToWorldExtent?(e.setStencilTestEnabled(!0),e.setStencilFunction(P.EQUAL,1,255)):e.setStencilTestEnabled(!1),this.blitTexture(e,t.colorTexture,R.NEAREST)}prepareDisplay(t,s,r){const{context:i}=t;if(i.bindFramebuffer(this._prevFBO),i.setColorMask(!0,!0,!0,!0),e(s)){const{r:e,g:t,b:r,a:n}=s.color;i.setClearColor(n*e/255,n*t/255,n*r/255,n)}else i.setClearColor(0,0,0,0);i.setStencilWriteMask(255),i.setClearStencil(0),i.clear(i.gl.COLOR_BUFFER_BIT|i.gl.STENCIL_BUFFER_BIT),this._isClippedToWorldExtent=this._worldExtentClipRenderer.render(t,r)}dispose(){if(this.materialManager.dispose(),this.textureManager.dispose(),this._blitRenderer=s(this._blitRenderer),this._worldExtentClipRenderer=s(this._worldExtentClipRenderer),this._brushCache&&(this._brushCache.forEach((e=>e.dispose())),this._brushCache.clear(),this._brushCache=null),this._fbos)for(const e in this._fbos)this._fbos[e]&&this._fbos[e].dispose();for(const e of this._fboPool)e.dispose();if(this._fboPool.length=0,this.effects)for(const e in this.effects)this.effects[e]&&this.effects[e].dispose();this._effectsManager.dispose(),this._vtlMaterialManager=s(this._vtlMaterialManager),this._prevFBO=null}getBrush(e,t){const s=N(e,t);let r=this._brushCache.get(s);return void 0===r&&(r=new s,this._brushCache.set(s,r)),this._brushCache.get(s)}renderObject(e,t,s,i){const n=r[s];if(!n)return null;let o=this._brushCache.get(n);void 0===o&&(o=new n,this._brushCache.set(n,o)),o.prepareState(e,t,i),o.draw(e,t,i)}renderObjects(e,t,s,i){const n=r[s];if(!n)return null;let o=this._brushCache.get(n);void 0===o&&(o=new n,this._brushCache.set(n,o)),o.drawMany(e,t,i)}registerRenderPass(e){const t=e.brushes.map((e=>(this._brushCache.has(e)||this._brushCache.set(e,new e),this._brushCache.get(e))));return new T(t,e)}setHighlightOptions(e){this.effects.highlight.setHighlightOptions(e)}blitTexture(e,t,s,r=1){e.setBlendingEnabled(!0),e.setBlendFunctionSeparate(O.ONE,O.ONE_MINUS_SRC_ALPHA,O.ONE,O.ONE_MINUS_SRC_ALPHA),e.setColorMask(!0,!0,!0,!0),this._blitRenderer.render(e,t,s,r)}getPostProcessingEffects(e){return this._effectsManager.getPostProcessingEffects(e)}_getOutputFBO(){return null!=this._renderTarget?this._renderTarget:this._fbos.output}_applyEffects(e,t){const{context:s}=e,r=this._effectsManager.getPostProcessingEffects(t);for(const{postProcessingEffect:i,effect:n}of r)s.bindFramebuffer(this._fbos.blend),i.draw(e,this._fbos.blend,n)}}function I(t,s,r,i){return t!==o.HIGHLIGHT&&(1!==i||e(s)&&"normal"!==s||e(r)&&r.length>0)}export{D as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../../../core/Error.js";import t from"../../../../core/Logger.js";import{isPowerOfTwo as r}from"../../../../core/mathUtils.js";import{pt2px as n}from"../../../../core/screenUtils.js";import{CapType as s,JoinType as a}from"../../../../symbols/cim/enums.js";import{copyAndPremultiply as i}from"./color.js";import{WGLGeometryType as o,WGLSymbologyType as c,VVType as u}from"./enums.js";import{TextProperties as l}from"./SymbolProperties.js";import{Usage as m,TextureType as f,PixelFormat as d,PixelType as p,TextureWrapMode as y,DataType as g,TextureSamplingMode as h}from"../../../webgl/enums.js";import{Texture as I}from"../../../webgl/Texture.js";import{VertexElementDescriptor as T}from"../../../webgl/VertexElementDescriptor.js";const E=t.getLogger("esri.views.2d.engine.webgl.Utils"),S="geometry",w="per_instance",L="per_instance_vv",A=[{name:S,strideInBytes:36}],N=[{name:S,strideInBytes:12}],M=[{name:S,strideInBytes:
|
|
5
|
+
import e from"../../../../core/Error.js";import t from"../../../../core/Logger.js";import{isPowerOfTwo as r}from"../../../../core/mathUtils.js";import{pt2px as n}from"../../../../core/screenUtils.js";import{CapType as s,JoinType as a}from"../../../../symbols/cim/enums.js";import{copyAndPremultiply as i}from"./color.js";import{WGLGeometryType as o,WGLSymbologyType as c,VVType as u}from"./enums.js";import{TextProperties as l}from"./SymbolProperties.js";import{Usage as m,TextureType as f,PixelFormat as d,PixelType as p,TextureWrapMode as y,DataType as g,TextureSamplingMode as h}from"../../../webgl/enums.js";import{Texture as I}from"../../../webgl/Texture.js";import{VertexElementDescriptor as T}from"../../../webgl/VertexElementDescriptor.js";const E=t.getLogger("esri.views.2d.engine.webgl.Utils"),S="geometry",w="per_instance",L="per_instance_vv",A=[{name:S,strideInBytes:36}],N=[{name:S,strideInBytes:12}],M=[{name:S,strideInBytes:36}],D=[{name:S,strideInBytes:24}],_=[{name:S,strideInBytes:12}],U=[{name:S,strideInBytes:40}],v=[{name:S,strideInBytes:36}],R=[{name:S,strideInBytes:36}];function B(e){const t={};for(const r of e)t[r.name]=r.strideInBytes;return t}const b=B(A),C=B(N),O=B(M),F=B(D),x=B(_),z=B(U),P=B(v),j=B(R);function G(e,t){switch(e){case o.MARKER:return t===c.HEATMAP?C:b;case o.FILL:switch(t){case c.DOT_DENSITY:return x;case c.SIMPLE:case c.OUTLINE_FILL_SIMPLE:return F;default:return O}case o.LINE:return z;case o.TEXT:return P;case o.LABEL:return j}}const $=[S],V=[S],Y=[S],k=[S],H=[S];function q(e){switch(e){case o.MARKER:return $;case o.FILL:return V;case o.LINE:return Y;case o.TEXT:return k;case o.LABEL:return H}}function X(e){switch(e%4){case 0:case 2:return 4;case 1:case 3:return 1}}function K(e,t){switch(t%4){case 0:case 2:return new Uint32Array(Math.floor(e*t/4));case 1:case 3:return new Uint8Array(e*t)}}function Z(e,t){switch(t%4){case 0:case 2:return new Uint32Array(e);case 1:case 3:return new Uint8Array(e)}}function J(e){return l.pool.acquire(e.color?i(e.color):[255,255,255,255],e.haloColor?i(e.haloColor):[255,255,255,255],n(e.haloSize),n(e.font.size),e.angle*Math.PI/180,e.xoffset/e.font.size,e.yoffset/e.font.size,"left"===e.horizontalAlignment?0:"right"===e.horizontalAlignment?1:.5,"top"===e.verticalAlignment?0:"bottom"===e.verticalAlignment?1:.5)}function Q(e){return null!=e}function W(e){return"number"==typeof e}function ee(t){switch(t){case"butt":return s.BUTT;case"round":return s.ROUND;case"square":return s.SQUARE;default:return E.error(new e("mapview-invalid-type",`Cap type ${t} is not a valid option. Defaulting to round`)),s.ROUND}}function te(t){switch(t){case"miter":return a.MITER;case"bevel":return a.BEVEL;case"round":return a.ROUND;default:return E.error(new e("mapview-invalid-type",`Join type ${t} is not a valid option. Defaulting to round`)),a.ROUND}}function re(e){switch(e){case"opacity":return u.OPACITY;case"color":return u.COLOR;case"rotation":return u.ROTATION;case"size":return u.SIZE;default:return E.error(`Cannot interpret unknown vv: ${e}`),null}}function ne(e){const{transform:t,hasZ:r,hasM:n}=e;return{transform:t,hasZ:r,hasM:n}}function se(e,t,r,n,s,a,i){for(const c in a){const t=a[c].stride,n=X(t),i=a[c].data,o=r[c].data,u=t*s.vertexCount/n,l=t*e/n,m=t*s.vertexFrom/n;for(let e=0;e<u;++e)o[e+l]=i[e+m]}const o=s.indexCount;for(let c=0;c<o;++c)n[c+t]=i[c+s.indexFrom]-s.vertexFrom+e}const ae={[S]:m.STATIC_DRAW};function ie(e,t){const r=[];for(let n=0;n<5;++n){const s=q(n),a={};for(const e of s)a[e]={data:t(n,e)};r.push({data:e(n),buffers:a})}return r}function oe(e,t){let n,s;return r(t.width)&&r(t.height)?(n=!0,s=h.LINEAR_MIPMAP_LINEAR):(n=!1,s=h.LINEAR),new I(e,{target:f.TEXTURE_2D,pixelFormat:d.RGBA,internalFormat:d.RGBA,dataType:p.UNSIGNED_BYTE,hasMipmap:n,samplingMode:s,wrapMode:y.CLAMP_TO_EDGE,flipped:!0},t)}function ce(e){return{vertexFrom:void 0,vertexTo:void 0,geometry:e}}function ue(e){switch(e){case g.BYTE:case g.UNSIGNED_BYTE:return 1;case g.SHORT:case g.UNSIGNED_SHORT:return 2;case g.FLOAT:case g.INT:case g.UNSIGNED_INT:return 4}}function le(t){switch(t){case p.UNSIGNED_BYTE:return 1;case p.UNSIGNED_SHORT_4_4_4_4:return 2;case p.FLOAT:return 4;default:return void E.error(new e("webgl-utils",`Unable to handle type ${t}`))}}function me(t){switch(t){case p.UNSIGNED_BYTE:return Uint8Array;case p.UNSIGNED_SHORT_4_4_4_4:return Uint16Array;case p.FLOAT:return Float32Array;default:return void E.error(new e("webgl-utils",`Unable to handle type ${t}`))}}function fe(e){const t={};for(const r in e){const n=e[r];let s=0;t[r]=n.map((e=>{const t=new T(e.name,e.count,e.type,s,0,e.normalized||!1);return s+=e.count*ue(e.type),t})),t[r].forEach((e=>e.stride=s))}return t}const de=e=>{const t=new Map;for(const r in e)for(const n of e[r])t.set(n.name,n.location);return t},pe=e=>{const t={};for(const r in e){const n=e[r];t[r]=n.length?n[0].stride:0}return t},ye=new Map,ge=(e,t)=>{if(!ye.has(e)){const r=fe(t),n={strides:pe(r),bufferLayouts:r,attributes:de(t)};ye.set(e,n)}return ye.get(e)};function he(e){e(o.FILL),e(o.LINE),e(o.MARKER),e(o.TEXT),e(o.LABEL)}const Ie=e=>"path"in e&&Ue(e.path),Te=e=>"url"in e&&e.url||"imageData"in e&&e.imageData,Ee=e=>"imageData"in e&&e.imageData&&"contentType"in e&&e.contentType?`data:${e.contentType};base64,${e.imageData}`:"url"in e?e.url:null,Se=e=>"url"in e&&e.url&&e.url.includes(".gif")||"contentType"in e&&"image/gif"===e.contentType||"imageData"in e&&e.imageData.includes("data:image/gif"),we=e=>"url"in e&&e.url&&e.url.includes(".png")||"contentType"in e&&"image/png"===e.contentType||"imageData"in e&&e.imageData.includes("data:image/png"),Le=e=>e.type&&e.type.toLowerCase().includes("3d");function Ae(e){switch(e.type){case"line":{const t=e;return"CIMSolidStroke"===t.cim.type&&!t.dashTemplate}case"fill":return"CIMSolidFill"===e.cim.type;case"esriSFS":return"esriSFSSolid"===e.style||"esriSFSNull"===e.style;case"esriSLS":return"esriSLSSolid"===e.style||"esriSLSNull"===e.style;default:return!1}}const Ne=e=>e.includes("data:image/svg+xml");function Me(e){switch("cim"in e?e.cim.type:e.type){case"esriSMS":case"esriPMS":case"CIMPointSymbol":case"CIMVectorMarker":case"CIMPictureMarker":case"CIMCharacterMarker":return!1;default:return!0}}function De(e){const t="maxVVSize"in e&&e.maxVVSize,r="width"in e&&e.width||"size"in e&&e.size||0;return t||r}function _e(e){const t=[];for(let r=0;r<e.length;r++)t.push(e.charCodeAt(r));return t}const Ue=e=>!!e&&(e=e.trim(),!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(e)&&/[\dz]$/i.test(e)&&e.length>4));export{O as C_FILL_STRIDE_SPEC,x as C_FILL_STRIDE_SPEC_DD,F as C_FILL_STRIDE_SPEC_SIMPLE,M as C_FILL_VERTEX_DEF,_ as C_FILL_VERTEX_DEF_DD,D as C_FILL_VERTEX_DEF_SIMPLE,C as C_HEATMAP_STRIDE_SPEC,N as C_HEATMAP_VERTEX_DEF,b as C_ICON_STRIDE_SPEC,A as C_ICON_VERTEX_DEF,j as C_LABEL_STRIDE_SPEC,R as C_LABEL_VERTEX_DEF,z as C_LINE_STRIDE_SPEC,U as C_LINE_VERTEX_DEF,P as C_TEXT_STRIDE_SPEC,v as C_TEXT_VERTEX_DEF,S as C_VBO_GEOMETRY,ae as C_VBO_INFO,w as C_VBO_PERINSTANCE,L as C_VBO_PERINSTANCE_VV,K as allocateTypedArrayBuffer,Z as allocateTypedArrayBufferwithData,_e as charCodes,se as copyMeshData,ie as createGeometryData,ge as createProgramDescriptor,oe as createTextureFromTexelData,he as forEachGeometryType,ce as geometryToMappedGeometry,ue as getBytes,ee as getCapType,te as getJoinType,q as getNamedBuffers,De as getPMSResourceSize,me as getPixelArrayCtor,le as getPixelBytes,G as getStrides,J as getTextProperties,ne as getTransformParams,Ee as getUrl,re as getVVType,Le as is3D,Q as isDefined,Se as isGIF,Te as isImageResource,W as isNumber,we as isPNG,Ne as isSVGImage,Ie as isSVGResource,Ae as isSimple,Ue as isValidSVG,Me as shouldRepeat,X as strideToPackingFactor};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*
|
|
2
|
+
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
|
+
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
|
+
*/
|
|
5
|
+
import{WGLSymbologyType as o}from"../enums.js";import r from"./WGLGeometryBrushMarker.js";import{assertRendererSchema as e}from"../techniques/utils.js";import{DataType as t}from"../../../../webgl/enums.js";class s extends r{supportsSymbology(r){return r===o.PIE_CHART}_drawMarkers(o,r,s,i,n,u,l){const{context:f}=o,{rendererInfo:m,pixelRatio:a}=o,{rendererSchema:d}=m;e(d,"pie-chart"),s.setUniform4fv("u_colors",d.colors),s.setUniform4fv("u_defaultColor",d.defaultColor),s.setUniform4fv("u_outlineColor",d.outlineColor),s.setUniform1f("u_donutRatio",d.donutRatio),s.setUniform1f("u_sectorThreshold",d.sectorThreshold),s.setUniform1f("u_outlineWidth",a*d.outlineWidth),f.drawElements(i,n,t.UNSIGNED_INT,u)}}export{s as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{isNone as
|
|
5
|
+
import{isNone as t,isSome as e}from"../../../../../core/maybe.js";import{MIN_MAX_ZOOM_PRECISION_FACTOR as i,TEXTURE_BINDING_ATTRIBUTE_DATA_0 as s,TEXTURE_BINDING_ATTRIBUTE_DATA_1 as o,TEXTURE_BINDING_ATTRIBUTE_DATA_2 as a,TEXTURE_BINDING_ATTRIBUTE_DATA_3 as r,TEXTURE_BINDING_ATTRIBUTE_DATA_4 as n,TEXTURE_BINDING_ATTRIBUTE_DATA_5 as m}from"../definitions.js";import u from"./WGLBrush.js";import{MaterialKeyBase as v}from"../materialKey/MaterialKey.js";import{BlendFactor as f,CompareFunction as l}from"../../../../webgl/enums.js";class p extends u{constructor(){super(...arguments),this._computeDesc=new Map}prepareState({context:t},e,i){i&&i.includes("hittest")?t.setBlendFunctionSeparate(f.ONE,f.ONE,f.ONE,f.ONE):t.setBlendFunctionSeparate(f.ONE,f.ONE_MINUS_SRC_ALPHA,f.ONE,f.ONE_MINUS_SRC_ALPHA),t.setBlendingEnabled(!0),t.setColorMask(!0,!0,!0,!0),t.setStencilWriteMask(0),t.setStencilTestEnabled(!0),t.setStencilFunction(l.EQUAL,e.stencilRef,255)}draw(e,i,s){const o=this.getGeometryType();i.commit(e);const a=i.getGeometry(o);t(a)||(e.timeline.begin(this.name),e.attributeView.bindTextures(e.context),a.forEachCommand((t=>{const o=v.load(t.materialKey).symbologyType;this.supportsSymbology(o)&&this.drawGeometry(e,i,t,s)})))}_setSharedUniforms(t,u,v){const{displayLevel:f,pixelRatio:l,state:p,passOptions:c}=u;e(c)&&"hittest"===c.type&&(t.setUniform2fv("u_hittestPos",c.position),t.setUniform1f("u_hittestDist",c.distance)),t.setUniform1f("u_pixelRatio",l),t.setUniformMatrix3fv("u_tileMat3",v.transforms.tileMat3),t.setUniformMatrix3fv("u_viewMat3",p.viewMat3),t.setUniformMatrix3fv("u_dvsMat3",v.transforms.dvs),t.setUniformMatrix3fv("u_displayViewMat3",p.displayViewMat3),t.setUniform1f("u_currentZoom",Math.round(f*i)),t.setUniform1i("u_attributeTextureSize",u.attributeView.size),t.setUniform1i("u_attributeData0",s),t.setUniform1i("u_attributeData1",o),t.setUniform1i("u_attributeData2",a),t.setUniform1i("u_attributeData3",r),t.setUniform1i("u_attributeData4",n),t.setUniform1i("u_attributeData5",m)}_setSizeVVUniforms(t,e,i,s){if(t.vvSizeMinMaxValue&&e.setUniform4fv("u_vvSizeMinMaxValue",i.vvSizeMinMaxValue),t.vvSizeScaleStops&&e.setUniform1f("u_vvSizeScaleStopsValue",i.vvSizeScaleStopsValue),t.vvSizeFieldStops){const t=i.getSizeVVFieldStops(s.key.level);e.setUniform1fv("u_vvSizeFieldStopsValues",t.values),e.setUniform1fv("u_vvSizeFieldStopsSizes",t.sizes)}t.vvSizeUnitValue&&e.setUniform1f("u_vvSizeUnitValueWorldToPixelsRatio",i.vvSizeUnitValueToPixelsRatio)}_setColorAndOpacityVVUniforms(t,e,i){t.vvColor&&(e.setUniform1fv("u_vvColorValues",i.vvColorValues),e.setUniform4fv("u_vvColors",i.vvColors)),t.vvOpacity&&(e.setUniform1fv("u_vvOpacityValues",i.vvOpacityValues),e.setUniform1fv("u_vvOpacities",i.vvOpacities))}_setRotationVVUniforms(t,e,i){t.vvRotation&&e.setUniform1f("u_vvRotationType","geographic"===i.vvMaterialParameters.vvRotationType?0:1)}_getTriangleDesc(t,e,i=["a_pos"]){const s=e.bufferLayouts.geometry,o=i.map((t=>s.findIndex((e=>e.name===t)))),a=`${t}-${o.join("-")}`;let r=this._computeDesc.get(a);if(!r){const t=e.strides,i=e.strides.geometry,n=new Map(e.attributes),m=s.map((t=>({...t}))),u=Math.max(...e.attributes.values()),v={geometry:m};let f=0;for(const e of o){const t=s[e];v.geometry.push({count:t.count,name:t.name+"1",divisor:t.divisor,normalized:t.normalized,offset:i+t.offset,stride:i,type:t.type}),v.geometry.push({count:t.count,name:t.name+"2",divisor:t.divisor,normalized:t.normalized,offset:2*i+t.offset,stride:i,type:t.type}),n.set(t.name+"1",u+ ++f),n.set(t.name+"2",u+ ++f)}r={bufferLayouts:v,attributes:n,strides:t},this._computeDesc.set(a,r)}return r}}export{p as default};
|