@arcgis/core 5.2.0-next.112 → 5.2.0-next.113
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/Ground.d.ts +4 -5
- package/Ground.js +1 -1
- package/arcgisGlobal.d.ts +5 -0
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/01ca17092545d72be7b6.js +1 -0
- package/assets/esri/core/workers/chunks/{f5a988bb850f7a7af143.js → 05b373a663cb5d4d722f.js} +1 -1
- package/assets/esri/core/workers/chunks/{36f8caeb574dcd5c0ed5.js → 0b727d7bf3e36e146725.js} +1 -1
- package/assets/esri/core/workers/chunks/0c65862e3dd810015491.js +1 -0
- package/assets/esri/core/workers/chunks/0e3e58ba8e2d358121a5.js +1 -0
- package/assets/esri/core/workers/chunks/0edebc6c516f0b9dac7b.js +1 -0
- package/assets/esri/core/workers/chunks/1004e77593dfa506cd5d.js +1 -0
- package/assets/esri/core/workers/chunks/184942ea601237c8241a.js +1 -0
- package/assets/esri/core/workers/chunks/20de0ea9fa08a6545978.js +1 -0
- package/assets/esri/core/workers/chunks/214d63813d268afc265d.js +1 -0
- package/assets/esri/core/workers/chunks/22e85819e23202a8ba90.js +1 -0
- package/assets/esri/core/workers/chunks/{6e677505d257e0848075.js → 23f9ab77e4e263f82636.js} +1 -1
- package/assets/esri/core/workers/chunks/28a04887ecaee5445d14.js +1 -0
- package/assets/esri/core/workers/chunks/{2fc5c1504691badc7792.js → 2ac2d0a7623dd060c144.js} +1 -1
- package/assets/esri/core/workers/chunks/2afce71e8b6ae86e0792.js +1 -0
- package/assets/esri/core/workers/chunks/36792b8a85e88044cb49.js +1 -0
- package/assets/esri/core/workers/chunks/36a7e19f43517aa94577.js +1 -0
- package/assets/esri/core/workers/chunks/{6e6cdff4bbe1ff2f44ac.js → 3ab25279aaa30f035038.js} +1 -1
- package/assets/esri/core/workers/chunks/{e6dae16208f6978b59e0.js → 3b499cfc89c8f87cdb20.js} +1 -1
- package/assets/esri/core/workers/chunks/445b0ca1b70730c9a2e6.js +1 -0
- package/assets/esri/core/workers/chunks/{24673aac70d6c949b6fa.js → 4bf2cc4d092601ff2b86.js} +1 -1
- package/assets/esri/core/workers/chunks/{d45483dd0dc2853b18b7.js → 4bfd63f3cf9208eb839b.js} +33 -33
- package/assets/esri/core/workers/chunks/501df20cdd09384f6ee2.js +1 -0
- package/assets/esri/core/workers/chunks/510a190a6f0a60ae38c3.js +1 -0
- package/assets/esri/core/workers/chunks/{89a785f8b61263e2d592.js → 552c92b01a5f02a115c5.js} +1 -1
- package/assets/esri/core/workers/chunks/564fdf0d663b773806cc.js +1 -0
- package/assets/esri/core/workers/chunks/{d9270f4935eb0d044db3.js → 57328c206f1e699ac06f.js} +1 -1
- package/assets/esri/core/workers/chunks/{50951fb13013b11b8a24.js → 58e62c8ce1292f4d3b06.js} +1 -1
- package/assets/esri/core/workers/chunks/5aee7739afb5160d4ace.js +1 -0
- package/assets/esri/core/workers/chunks/5b9925f23d4b10a7087e.js +1 -0
- package/assets/esri/core/workers/chunks/5f79ba5639067f734791.js +1 -0
- package/assets/esri/core/workers/chunks/{b013b70e40dfb6ce013e.js → 60c61f34733063730386.js} +1 -1
- package/assets/esri/core/workers/chunks/62b1f94f4fa978d4da48.js +1 -0
- package/assets/esri/core/workers/chunks/6b264006b96cbf93d8ed.js +1 -0
- package/assets/esri/core/workers/chunks/6b9d29ca568590358478.js +1 -0
- package/assets/esri/core/workers/chunks/{7c5310e0104c22da0261.js → 6c7cb7974969e3167f2b.js} +1 -1
- package/assets/esri/core/workers/chunks/6c82cbcd504c711a7450.js +1 -0
- package/assets/esri/core/workers/chunks/{e98b785e8f4edc8bd3ff.js → 6eceeca33fac8e900d9d.js} +1 -1
- package/assets/esri/core/workers/chunks/7232fc11b23777b6be94.js +1 -0
- package/assets/esri/core/workers/chunks/726ca458b98bb4334431.js +1 -0
- package/assets/esri/core/workers/chunks/785206da3962ba23de16.js +1 -0
- package/assets/esri/core/workers/chunks/{1c70620f40be02f532b5.js → 7b169eabafcc03bfaee6.js} +1 -1
- package/assets/esri/core/workers/chunks/7bbc3d22383388d11345.js +1 -0
- package/assets/esri/core/workers/chunks/{082069f80eee0407b828.js → 7edf57e31ff07af9032b.js} +1 -1
- package/assets/esri/core/workers/chunks/83ed38468e316302b157.js +1 -0
- package/assets/esri/core/workers/chunks/85c876ee9e63d5732937.js +1 -0
- package/assets/esri/core/workers/chunks/8f0ecf4d06ec7b67d4ed.js +1 -0
- package/assets/esri/core/workers/chunks/8f1c5f5e70d4b33d021d.js +1 -0
- package/assets/esri/core/workers/chunks/{a1916bca1af5c65be4b0.js → 90ab3c47138875070a53.js} +1 -1
- package/assets/esri/core/workers/chunks/{10389c87d9c6a43363ce.js → 917dec9c004218c58950.js} +1 -1
- package/assets/esri/core/workers/chunks/91f451b98e0f696043df.js +1 -0
- package/assets/esri/core/workers/chunks/943d0026ca4d49eb3ac2.js +1 -0
- package/assets/esri/core/workers/chunks/982a396bd4fffa62e911.js +1 -0
- package/assets/esri/core/workers/chunks/98a5327fd96d9542b39f.js +1 -0
- package/assets/esri/core/workers/chunks/9b9a60f1e0c48aa701f0.js +1 -0
- package/assets/esri/core/workers/chunks/9d92e6f0beed9a8580fa.js +1 -0
- package/assets/esri/core/workers/chunks/9df379041e8860fe7f01.js +1 -0
- package/assets/esri/core/workers/chunks/{1e8ceb4a4b28625236e3.js → a42505b978d54d36d3b6.js} +1 -1
- package/assets/esri/core/workers/chunks/{bfbe6ff786435fe1e7cf.js → a86a4e550a92f770d6d5.js} +1 -1
- package/assets/esri/core/workers/chunks/{a34eee4c9d4c1c2b8c49.js → ab60f3bc18b5ea504f70.js} +1 -1
- package/assets/esri/core/workers/chunks/{18b9ec6ba7a6c0fa2ac6.js → b1880d9f5eafd50ce84b.js} +1 -1
- package/assets/esri/core/workers/chunks/{777fc163530448eea13e.js → b4222152efaf73b37b53.js} +1 -1
- package/assets/esri/core/workers/chunks/b6ca73c1384f07b30b74.js +1 -0
- package/assets/esri/core/workers/chunks/bb4cbf6b7c35e8c78cc7.js +1 -0
- package/assets/esri/core/workers/chunks/bb831d23422acfb00ae2.js +1 -0
- package/assets/esri/core/workers/chunks/c0855be20ffcd52c7026.js +1 -0
- package/assets/esri/core/workers/chunks/{a0f742fd947104662d37.js → c6277236ec47586dca00.js} +1 -1
- package/assets/esri/core/workers/chunks/{3be33a129d3ae7dc4f06.js → caf38cf4d8542fb11c46.js} +1 -1
- package/assets/esri/core/workers/chunks/{2728eda8178e02fbca47.js → cd0f5cd0fefe7f49e3d8.js} +1 -1
- package/assets/esri/core/workers/chunks/{48a53bfeef11c32dadcc.js → d25fb32a233d2128afbe.js} +1 -1
- package/assets/esri/core/workers/chunks/d629708bf23da24ee523.js +1 -0
- package/assets/esri/core/workers/chunks/db141122060d8d9b38da.js +1 -0
- package/assets/esri/core/workers/chunks/dc1944a7601b518a9c48.js +1 -0
- package/assets/esri/core/workers/chunks/{573ee2e59d26bc75201e.js → dc8670f32bb0b93c1473.js} +1 -1
- package/assets/esri/core/workers/chunks/e1f2b07be33e33117313.js +1 -0
- package/assets/esri/core/workers/chunks/e52f30dfb7c82491a7f2.js +1 -0
- package/assets/esri/core/workers/chunks/e5906b28b981199fd489.js +1 -0
- package/assets/esri/core/workers/chunks/{b3293ee9f221423a6825.js → e611e452f04a9ce64cf8.js} +1 -1
- package/assets/esri/core/workers/chunks/{0f20c458f873564faff2.js → ec4f887153c24ab83f2c.js} +1 -1
- package/assets/esri/core/workers/chunks/{707b4ae689c4329cad3b.js → f40ceb5e03c699605302.js} +1 -1
- package/assets/esri/core/workers/chunks/{547a073c789fdfb78310.js → f42243c62dd0b6993816.js} +1 -1
- package/assets/esri/core/workers/chunks/f91cab9904020cf25d50.js +1 -0
- package/assets/esri/core/workers/chunks/f9b29d2ce1cd31c0fce1.js +1 -0
- package/assets/esri/core/workers/chunks/fdf5ceffec9d5185953d.js +1 -0
- package/assets/esri/views/3d/environment/resources/milkyway-band.ktx2 +0 -0
- package/chunks/DeepSky.glsl.js +1 -1
- package/chunks/FocusArea.glsl.js +1 -1
- package/chunks/GaussianSplatDepth.glsl.js +3 -3
- package/chunks/RibbonLine.glsl.js +15 -13
- package/config.js +1 -1
- package/geometry/Extent.js +1 -1
- package/geometry/operators/affineTransformOperator.d.ts +9 -3
- package/geometry/operators/affineTransformOperator.js +1 -1
- package/geometry/operators/alphaShapeOperator.d.ts +14 -4
- package/geometry/operators/alphaShapeOperator.js +1 -1
- package/geometry/operators/areaOperator.d.ts +11 -3
- package/geometry/operators/areaOperator.js +1 -1
- package/geometry/operators/autoCompleteOperator.d.ts +6 -2
- package/geometry/operators/autoCompleteOperator.js +1 -1
- package/geometry/operators/boundaryOperator.d.ts +9 -3
- package/geometry/operators/boundaryOperator.js +1 -1
- package/geometry/operators/bufferOperator.d.ts +19 -5
- package/geometry/operators/bufferOperator.js +1 -1
- package/geometry/operators/centroidOperator.d.ts +6 -2
- package/geometry/operators/centroidOperator.js +1 -1
- package/geometry/operators/clipOperator.d.ts +9 -3
- package/geometry/operators/clipOperator.js +1 -1
- package/geometry/operators/containsOperator.d.ts +9 -3
- package/geometry/operators/containsOperator.js +1 -1
- package/geometry/operators/convexHullOperator.d.ts +17 -5
- package/geometry/operators/convexHullOperator.js +1 -1
- package/geometry/operators/crossesOperator.d.ts +9 -3
- package/geometry/operators/crossesOperator.js +1 -1
- package/geometry/operators/cutOperator.d.ts +6 -2
- package/geometry/operators/cutOperator.js +1 -1
- package/geometry/operators/densifyOperator.d.ts +14 -4
- package/geometry/operators/densifyOperator.js +1 -1
- package/geometry/operators/differenceOperator.d.ts +9 -3
- package/geometry/operators/differenceOperator.js +1 -1
- package/geometry/operators/disjointOperator.d.ts +9 -3
- package/geometry/operators/disjointOperator.js +1 -1
- package/geometry/operators/distanceOperator.d.ts +11 -3
- package/geometry/operators/distanceOperator.js +1 -1
- package/geometry/operators/equalsOperator.d.ts +9 -3
- package/geometry/operators/equalsOperator.js +1 -1
- package/geometry/operators/extendOperator.d.ts +11 -3
- package/geometry/operators/extendOperator.js +1 -1
- package/geometry/operators/generalizeOperator.d.ts +14 -4
- package/geometry/operators/generalizeOperator.js +1 -1
- package/geometry/operators/geodesicBufferOperator.d.ts +25 -7
- package/geometry/operators/geodesicBufferOperator.js +1 -1
- package/geometry/operators/geodesicProximityOperator.d.ts +28 -8
- package/geometry/operators/geodesicProximityOperator.js +1 -1
- package/geometry/operators/geodeticAreaOperator.d.ts +17 -5
- package/geometry/operators/geodeticAreaOperator.js +1 -1
- package/geometry/operators/geodeticDensifyOperator.d.ts +20 -6
- package/geometry/operators/geodeticDensifyOperator.js +1 -1
- package/geometry/operators/geodeticDistanceOperator.d.ts +17 -5
- package/geometry/operators/geodeticDistanceOperator.js +1 -1
- package/geometry/operators/geodeticLengthOperator.d.ts +17 -5
- package/geometry/operators/geodeticLengthOperator.js +1 -1
- package/geometry/operators/geodeticUtilsOperator.d.ts +17 -5
- package/geometry/operators/geodeticUtilsOperator.js +1 -1
- package/geometry/operators/graphicBufferOperator.d.ts +11 -3
- package/geometry/operators/graphicBufferOperator.js +1 -1
- package/geometry/operators/integrateOperator.d.ts +6 -2
- package/geometry/operators/integrateOperator.js +1 -1
- package/geometry/operators/intersectionOperator.d.ts +12 -4
- package/geometry/operators/intersectionOperator.js +1 -1
- package/geometry/operators/intersectsOperator.d.ts +9 -3
- package/geometry/operators/intersectsOperator.js +1 -1
- package/geometry/operators/isNearOperator.d.ts +11 -3
- package/geometry/operators/isNearOperator.js +1 -1
- package/geometry/operators/json/bufferOperator.js +1 -1
- package/geometry/operators/json/containsOperator.js +1 -1
- package/geometry/operators/json/convexHullOperator.js +1 -1
- package/geometry/operators/json/crossesOperator.js +1 -1
- package/geometry/operators/json/disjointOperator.js +1 -1
- package/geometry/operators/json/generalizeOperator.js +1 -1
- package/geometry/operators/json/geodesicBufferOperator.js +1 -1
- package/geometry/operators/json/graphicBufferOperator.js +1 -1
- package/geometry/operators/json/intersectionOperator.js +1 -1
- package/geometry/operators/json/intersectsOperator.js +1 -1
- package/geometry/operators/json/lengthOperator.js +1 -1
- package/geometry/operators/json/offsetOperator.js +1 -1
- package/geometry/operators/json/overlapsOperator.js +1 -1
- package/geometry/operators/json/projectOperator.js +1 -1
- package/geometry/operators/json/simplifyOperator.js +1 -1
- package/geometry/operators/json/simplifyOperatorOGC.js +1 -1
- package/geometry/operators/json/touchesOperator.js +1 -1
- package/geometry/operators/json/unionOperator.js +1 -1
- package/geometry/operators/json/withinOperator.js +1 -1
- package/geometry/operators/labelPointOperator.d.ts +9 -3
- package/geometry/operators/labelPointOperator.js +1 -1
- package/geometry/operators/lengthOperator.d.ts +11 -3
- package/geometry/operators/lengthOperator.js +1 -1
- package/geometry/operators/linesToPolygonsOperator.d.ts +6 -2
- package/geometry/operators/linesToPolygonsOperator.js +1 -1
- package/geometry/operators/locateBetweenOperator.d.ts +6 -2
- package/geometry/operators/locateBetweenOperator.js +1 -1
- package/geometry/operators/minimumBoundingCircleOperator.d.ts +14 -4
- package/geometry/operators/minimumBoundingCircleOperator.js +1 -1
- package/geometry/operators/multiPartToSinglePartOperator.d.ts +11 -3
- package/geometry/operators/multiPartToSinglePartOperator.js +1 -1
- package/geometry/operators/offsetOperator.d.ts +14 -4
- package/geometry/operators/offsetOperator.js +1 -1
- package/geometry/operators/overlapsOperator.d.ts +9 -3
- package/geometry/operators/overlapsOperator.js +1 -1
- package/geometry/operators/polygonOverlayOperator.d.ts +11 -3
- package/geometry/operators/polygonOverlayOperator.js +1 -1
- package/geometry/operators/polygonSlicerOperator.d.ts +22 -6
- package/geometry/operators/polygonSlicerOperator.js +1 -1
- package/geometry/operators/projectOperator.d.ts +15 -5
- package/geometry/operators/projectOperator.js +1 -1
- package/geometry/operators/proximityOperator.d.ts +22 -6
- package/geometry/operators/proximityOperator.js +1 -1
- package/geometry/operators/relateOperator.d.ts +12 -4
- package/geometry/operators/relateOperator.js +1 -1
- package/geometry/operators/reshapeOperator.d.ts +6 -2
- package/geometry/operators/reshapeOperator.js +1 -1
- package/geometry/operators/shapePreservingProjectOperator.d.ts +20 -6
- package/geometry/operators/shapePreservingProjectOperator.js +1 -1
- package/geometry/operators/simplifyOGCOperator.d.ts +3 -1
- package/geometry/operators/simplifyOGCOperator.js +1 -1
- package/geometry/operators/simplifyOperator.d.ts +12 -4
- package/geometry/operators/simplifyOperator.js +1 -1
- package/geometry/operators/singlePartToMultiPartOperator.js +1 -1
- package/geometry/operators/support/deprecatedOperator.js +2 -0
- package/geometry/operators/symmetricDifferenceOperator.d.ts +9 -3
- package/geometry/operators/symmetricDifferenceOperator.js +1 -1
- package/geometry/operators/touchesOperator.d.ts +9 -3
- package/geometry/operators/touchesOperator.js +1 -1
- package/geometry/operators/unionOperator.d.ts +9 -3
- package/geometry/operators/unionOperator.js +1 -1
- package/geometry/operators/withinOperator.d.ts +9 -3
- package/geometry/operators/withinOperator.js +1 -1
- package/geometry/support/intersectsBase.js +1 -1
- package/geometry/support/normalizeUtils.js +1 -1
- package/kernel.js +1 -1
- package/layers/IntegratedMesh3DTilesLayer.js +1 -1
- package/layers/IntegratedMeshLayer.js +1 -1
- package/layers/SceneLayer.js +1 -1
- package/layers/buildingSublayers/BuildingComponentSublayer.js +1 -1
- package/layers/list/BasemapItemCollection.d.ts +40 -14
- package/layers/list/BasemapItemCollection.js +1 -1
- package/layers/list/CatalogItemCollection.d.ts +29 -11
- package/layers/list/CatalogItemCollection.js +1 -1
- package/layers/list/Item.d.ts +66 -122
- package/layers/list/Item.js +1 -1
- package/layers/list/ItemPanel.d.ts +23 -34
- package/layers/list/LayerItemCollection.d.ts +33 -43
- package/layers/list/LayerItemCollection.js +1 -1
- package/layers/list/TableItem.d.ts +42 -53
- package/layers/list/TableItem.js +1 -1
- package/layers/list/TableItemCollection.d.ts +25 -55
- package/layers/list/TableItemCollection.js +1 -1
- package/layers/list/TableItemPanel.d.ts +25 -23
- package/layers/list/support/layerListUtils.js +1 -1
- package/layers/list/types.d.ts +158 -37
- package/layers/support/ElevationQuery.js +1 -1
- package/layers/support/FeatureFilter.d.ts +2 -1
- package/layers/support/FeatureFilter.js +1 -1
- package/package.json +2 -2
- package/rest/knowledgeGraph/GraphDeleteNamedTypeResult.d.ts +0 -1
- package/support/revision.js +1 -1
- package/symbols/LineSymbol3DLayer.d.ts +9 -3
- package/symbols/cim/CIMSymbolDrawHelper.js +1 -1
- package/symbols/cim/CIMSymbolHelper.js +1 -1
- package/symbols/cim/OverrideHelper.js +1 -1
- package/symbols/cim/Rasterizer.js +1 -1
- package/symbols/cim/cimAnalyzer.js +1 -1
- package/symbols/cim/dashUtils.js +2 -0
- package/symbols/cim/effects/EffectDashes.js +1 -1
- package/symbols/cim/fromCIMFontStyle.js +2 -0
- package/symbols/cim/richTextUtils.js +1 -1
- package/symbols/cim/utils.js +1 -1
- package/symbols/patterns/LinePattern3D.d.ts +10 -4
- package/symbols/patterns/LinePattern3D.js +1 -1
- package/symbols/patterns/LineTemplatePattern3D.d.ts +48 -0
- package/symbols/patterns/LineTemplatePattern3D.js +2 -0
- package/symbols/patterns/utils.js +1 -1
- package/symbols/support/Symbol3DOutline.js +1 -1
- package/views/2d/engine/webgl/AttributeStoreView.js +1 -1
- package/views/2d/engine/webgl/FeatureDisplayList.js +1 -1
- package/views/2d/engine/webgl/GlyphMosaic.js +1 -1
- package/views/2d/engine/webgl/GlyphWorker.js +1 -1
- package/views/2d/engine/webgl/TextureManager.js +1 -1
- package/views/2d/engine/webgl/decorGlyphRect.js +2 -0
- package/views/2d/engine/webgl/definitions.js +1 -1
- package/views/2d/engine/webgl/effects/highlight/HighlightGradient.js +1 -1
- package/views/2d/engine/webgl/effects/highlight/MultiHighlightGradient.js +1 -1
- package/views/2d/engine/webgl/hashMosaic.js +2 -0
- package/views/2d/engine/webgl/shaderGraph/techniques/featureTechniqueUtils.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/shaders/AFeatureShader.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/shaders/ShaderHighlight.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/shaders/utils.js +1 -1
- package/views/2d/layers/FeatureLikeLayerView2D.js +1 -1
- package/views/2d/layers/GraphicsLayerView2D.js +1 -1
- package/views/2d/layers/ImageryLayerView2D.js +1 -1
- package/views/2d/layers/LayerView2D.js +1 -1
- package/views/2d/layers/MapImageLayerView2D.js +1 -1
- package/views/2d/layers/MapNotesLayerView2D.js +1 -1
- package/views/2d/layers/RouteLayerView2D.js +1 -1
- package/views/2d/layers/TileLayerView2D.js +1 -1
- package/views/2d/layers/features/FeatureContainer.js +1 -1
- package/views/2d/layers/features/FeaturePipelineWorker.js +1 -1
- package/views/2d/layers/features/Processor.js +1 -1
- package/views/2d/layers/features/processor/AProcessorStrategy.js +1 -1
- package/views/2d/layers/features/processor/AggregateStrategy.js +1 -1
- package/views/2d/layers/features/processor/FeatureUpdateStrategy.js +1 -1
- package/views/2d/layers/features/processor/bins/BinLevelState.js +1 -1
- package/views/2d/layers/features/processor/clusters/ClusterLevelState.js +1 -1
- package/views/2d/layers/features/processor/tracks/TrackLevelState.js +1 -1
- package/views/2d/layers/features/schema/processor/SimpleProcessorSchema.js +1 -1
- package/views/2d/layers/features/sources/FeatureSource.js +1 -1
- package/views/2d/layers/features/support/AttributeStore.js +1 -1
- package/views/2d/layers/graphics/AGraphicContainer.js +1 -1
- package/views/2d/layers/graphics/GraphicBoundsRenderer.js +1 -1
- package/views/2d/layers/graphics/GraphicsView2D.js +1 -1
- package/views/2d/layers/support/FeatureCommandQueue.js +1 -1
- package/views/2d/layers/support/FilterSchema.js +2 -0
- package/views/2d/layers/support/HighlightRegistry.js +2 -0
- package/views/2d/layers/support/annodime/dimensionUtils.js +1 -1
- package/views/2d/layers/support/util.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightRayIntersector.js +1 -1
- package/views/3d/input/SceneInputManager.js +1 -1
- package/views/3d/input/handlers/ground/GroundNavigation.js +1 -1
- package/views/3d/layers/GaussianSplatLayerView3D.js +1 -1
- package/views/3d/layers/I3SMeshView3D.js +1 -1
- package/views/3d/layers/IntegratedMesh3DTilesLayerView3D.js +1 -1
- package/views/3d/layers/IntegratedMeshLayerView3D.js +1 -1
- package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
- package/views/3d/layers/graphics/Graphics3DFeatureStore.js +1 -1
- package/views/3d/layers/graphics/Graphics3DGraphic.js +1 -1
- package/views/3d/layers/graphics/Graphics3DLineSymbolLayer.js +1 -1
- package/views/3d/layers/support/Tiles3DMeshIntersectionHandler.js +1 -1
- package/views/3d/navigation/Navigation3D.d.ts +16 -0
- package/views/3d/navigation/Navigation3D.js +2 -0
- package/views/3d/navigation/modes/DefaultNavigationMode3D.d.ts +4 -0
- package/views/3d/navigation/modes/DefaultNavigationMode3D.js +2 -0
- package/views/3d/navigation/modes/GroundNavigationMode3D.d.ts +4 -0
- package/views/3d/navigation/modes/GroundNavigationMode3D.js +2 -0
- package/views/3d/navigation/modes/NavigationMode3D.d.ts +4 -0
- package/views/3d/navigation/modes/NavigationMode3D.js +2 -0
- package/views/3d/navigation/modes/NavigationMode3DUnion.d.ts +5 -0
- package/views/3d/state/ConstraintsManager.js +1 -1
- package/views/3d/support/QualityProfile.js +1 -1
- package/views/3d/support/hitTest.js +1 -1
- package/views/3d/terrain/ExtentHelper.js +1 -1
- package/views/3d/webgl-engine/collections/Component/Material/ComponentMaterial.js +1 -1
- package/views/3d/webgl-engine/effects/AmbientIllumination.js +2 -0
- package/views/3d/webgl-engine/effects/fog/Fog.js +1 -1
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.js +1 -1
- package/views/3d/webgl-engine/effects/glow/BlurEmission.js +1 -1
- package/views/3d/webgl-engine/effects/ssao/SSAO.js +1 -1
- package/views/3d/webgl-engine/effects/stars/Stars.js +1 -1
- package/views/3d/webgl-engine/lib/BindParameters.js +1 -1
- package/views/3d/webgl-engine/lib/EmissionComposite.js +1 -1
- package/views/3d/webgl-engine/lib/GaussianSplatDepthRenderer.js +1 -1
- package/views/3d/webgl-engine/lib/RenderFeature.js +1 -1
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/SortedRenderGeometryRenderer.js +1 -1
- package/views/3d/webgl-engine/materials/lineStippleUtils.js +1 -1
- package/views/3d/webgl-engine/parts/RenderView.js +1 -1
- package/views/3d/webgl-engine/shaders/GaussianSplatPass.glsl.js +12 -8
- package/views/3d/webgl-engine/shaders/GaussianSplatTechniqueConfiguration.js +1 -1
- package/views/PopupView.js +1 -1
- package/views/SceneView.js +1 -1
- package/views/View.js +1 -1
- package/views/layers/FeatureLikeLayerView.js +1 -1
- package/widgets/LayerList/LayerListViewModel.d.ts +1 -0
- package/widgets/LayerList/LayerListViewModel.js +1 -1
- package/widgets/LayerList/ListItem.d.ts +4 -0
- package/widgets/LayerList/ListItemPanel.d.ts +3 -0
- package/widgets/OrientedImageryViewer/types.d.ts +2 -2
- package/widgets/OrientedImageryViewer.d.ts +20 -1
- package/widgets/OrientedImageryViewer.js +1 -1
- package/widgets/Sketch/SketchViewModel.js +1 -1
- package/widgets/support/iconUtils.js +1 -1
- package/assets/esri/core/workers/chunks/03601be8b0763f82e88f.js +0 -1
- package/assets/esri/core/workers/chunks/0bff8d589312be6588fe.js +0 -1
- package/assets/esri/core/workers/chunks/0de90b1ad8118457fd5a.js +0 -1
- package/assets/esri/core/workers/chunks/0e1a067ab243900d0371.js +0 -1
- package/assets/esri/core/workers/chunks/0ee6109e6578395a7900.js +0 -1
- package/assets/esri/core/workers/chunks/0ee7376c29e0fd8f676c.js +0 -1
- package/assets/esri/core/workers/chunks/13551987fbeaae154df8.js +0 -1
- package/assets/esri/core/workers/chunks/186350d720352bd5ff33.js +0 -1
- package/assets/esri/core/workers/chunks/25ecf94d776c3b6db0f3.js +0 -1
- package/assets/esri/core/workers/chunks/262052dfaec3af8a58b9.js +0 -1
- package/assets/esri/core/workers/chunks/2c01477b69c38f691e19.js +0 -1
- package/assets/esri/core/workers/chunks/307297e025eed110095f.js +0 -1
- package/assets/esri/core/workers/chunks/33422dca6f4bcaa0ea74.js +0 -1
- package/assets/esri/core/workers/chunks/33e583166ab3943ecf0e.js +0 -1
- package/assets/esri/core/workers/chunks/37ae52c71bf9c70fbb92.js +0 -1
- package/assets/esri/core/workers/chunks/3daddcb106a7009c5a70.js +0 -1
- package/assets/esri/core/workers/chunks/3de6e54b6ed0feae1940.js +0 -1
- package/assets/esri/core/workers/chunks/448f068a14f24f2f8a43.js +0 -1
- package/assets/esri/core/workers/chunks/4c088c26d5d546c95c90.js +0 -1
- package/assets/esri/core/workers/chunks/5134241be1f1bf25231a.js +0 -1
- package/assets/esri/core/workers/chunks/56163189fbe63aa11e94.js +0 -1
- package/assets/esri/core/workers/chunks/571cf99c3eab8e517542.js +0 -1
- package/assets/esri/core/workers/chunks/5762746cfb02a4119d82.js +0 -1
- package/assets/esri/core/workers/chunks/5830deda121e4c95d199.js +0 -1
- package/assets/esri/core/workers/chunks/58e4aecabca047f1d229.js +0 -1
- package/assets/esri/core/workers/chunks/5c8f423812a23c02c1fd.js +0 -1
- package/assets/esri/core/workers/chunks/5eb726317b6602f1e206.js +0 -1
- package/assets/esri/core/workers/chunks/6e2075bd4832ff0db68c.js +0 -1
- package/assets/esri/core/workers/chunks/7608de0d942b4c16b2f6.js +0 -1
- package/assets/esri/core/workers/chunks/7610dd0b46948b7bd840.js +0 -1
- package/assets/esri/core/workers/chunks/7737ab739eba6d81282d.js +0 -1
- package/assets/esri/core/workers/chunks/7be56ac60e580c806a5d.js +0 -1
- package/assets/esri/core/workers/chunks/7d9468e38f3bf006f86e.js +0 -1
- package/assets/esri/core/workers/chunks/7efc51324cfc8e08c756.js +0 -1
- package/assets/esri/core/workers/chunks/84dc2afd89263a311b81.js +0 -1
- package/assets/esri/core/workers/chunks/852649460d664b0a1a1d.js +0 -1
- package/assets/esri/core/workers/chunks/ab332bd411d6c7d4190c.js +0 -1
- package/assets/esri/core/workers/chunks/bc9b96a539f28afcb8cb.js +0 -1
- package/assets/esri/core/workers/chunks/be69e2dda75b079362b2.js +0 -1
- package/assets/esri/core/workers/chunks/bf9eba555aebca2c132b.js +0 -1
- package/assets/esri/core/workers/chunks/c18de0f6cbeecee4ce34.js +0 -1
- package/assets/esri/core/workers/chunks/c9df18e9ff7367a004b6.js +0 -1
- package/assets/esri/core/workers/chunks/d33d08cb6856cd2eb35e.js +0 -1
- package/assets/esri/core/workers/chunks/e688e6e816824b53a25e.js +0 -1
- package/assets/esri/core/workers/chunks/ea068c797e3e462f4518.js +0 -1
- package/assets/esri/core/workers/chunks/eaf1d38f09744b7e84f5.js +0 -1
- package/assets/esri/core/workers/chunks/eff99e45d818e58fd443.js +0 -1
- package/assets/esri/core/workers/chunks/f219ba010c480bb75684.js +0 -1
- package/assets/esri/core/workers/chunks/f60d5ce49c173d5381ec.js +0 -1
- package/assets/esri/core/workers/chunks/f72f4413fc7461e11a2a.js +0 -1
- package/assets/esri/core/workers/chunks/f834aa732c3f06525089.js +0 -1
- package/assets/esri/core/workers/chunks/fae14e30fa7d81bf706e.js +0 -1
- package/assets/esri/core/workers/chunks/fb6f1b562ee0983c8c6e.js +0 -1
- package/assets/esri/core/workers/chunks/fc1658eae7b312502fab.js +0 -1
- package/views/2d/engine/webgl/Utils.js +0 -2
- package/views/2d/layers/support/HighlightCounter.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{bidiText as e}from"../../core/BidiText.js";import{clone as t}from"../../core/lang.js";import r from"../../core/Logger.js";import o from"../../core/RandomLCG.js";import{px2pt as a}from"../../core/screenUtils.js";import{create as s,expandPointInPlace as i}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as n}from"../../geometry/support/boundsUtils.js";import{isCurvedGeometry as l}from"../../geometry/support/curves/curveUtils.js";import{densifyCurvedGeometry as c}from"../../geometry/support/curves/densifyCurvedGeometry.js";import m from"../Font.js";import{loadGeometryOperatorsForEffect as y,loadGeometryOperatorsForPlacement as f}from"./CIMEffects.js";import{Placement as h}from"./CIMPlacements.js";import{EnvDrawHelper as u,CanvasDrawHelper as p,Transformation as S,lineGapType2LineHeight as M}from"./CIMSymbolDrawHelper.js";import{defaultCIMValues as d}from"./defaultCIMValues.js";import{getNumericValue as g,fromCIMFontStyle as b,fromCIMFontDecoration as x,getEffectsInflateSize as C}from"./utils.js";import{defaultPolylineSymbol2D as I}from"../support/defaults.js";import{cInfinity as k}from"../../views/2d/engine/vectorTiles/GeometryUtils.js";import{magicLabelLineHeight as w,glyphSize as P,randomInsidePolygonTextureSize as L}from"../../views/2d/engine/webgl/definitions.js";import{shapeTextResource as z}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";import{roundPtToWholePixel as F,getLineWidth as D}from"../../views/2d/layers/graphics/graphicsUtils.js";const T=Math.PI,v=T/2,A=Math.PI/180,G=96/72,j=1.4142135623730951,E=2,R=4,B=()=>r.getLogger("esri.symbols.cim.CIMSymbolHelper");function X(e){let t;switch(e.type){case"cim":return e.data;case"web-style":return e;case"simple-marker":{const r=_.fromSimpleMarker(e);if(!r)throw new Error("InternalError: Cannot convert symbol to CIM");t=r;break}case"picture-marker":t=_.fromPictureMarker(e);break;case"simple-line":t=_.fromSimpleLineSymbol(e);break;case"simple-fill":t=_.fromSimpleFillSymbol(e);break;case"picture-fill":t=_.fromPictureFillSymbol(e);break;case"text":t=_.fromTextSymbol(e)}return{type:"CIMSymbolReference",symbol:t}}function V(e,t,r){switch(t.type){case"CIMSymbolReference":return V(e,t.symbol,r);case"CIMPointSymbol":null==r&&(r={x:0,y:0}),e.drawSymbol(t,r);break;case"CIMLineSymbol":null==r&&(r={paths:[[[0,0],[10,0]]]}),e.drawSymbol(t,r);break;case"CIMPolygonSymbol":null==r&&(r={rings:[[[0,0],[0,10],[10,10],[10,0],[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??0);default:return 0}}class N{static getSymbolInflateSize(e,t,r,o,a){return e||(e=[0,0,0,0]),t?this._getInflateSize(e,t,r,o,a):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)}static getPointSymbolHaloPadding(e,t){const r=g(e.haloSize);if(r<=0||!e.haloSymbol?.symbolLayers?.some(e=>!1!==e.enable))return 0;const o=this.getSymbolInflateSize([0,0,0,0],e.haloSymbol,t,0,null);return r+this.safeSize(o)}static _vectorMarkerBounds(e,t,r,o){let a=!0;const i=s();if(t?.markerGraphics)for(const s of t.markerGraphics){const t=[0,0,0,0];s.geometry&&(n(i,s.geometry),t[0]=0,t[1]=0,t[2]=0,t[3]=0,this.getSymbolInflateSize(t,s.symbol,r,0,o),i[0]+=t[0],i[1]+=t[1],i[2]+=t[2],i[3]+=t[3],a?(e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],a=!1):(e[0]=Math.min(e[0],i[0]),e[1]=Math.min(e[1],i[1]),e[2]=Math.max(e[2],i[2]),e[3]=Math.max(e[3],i[3])))}return e}static _getInflateSize(e,t,r,o,a){if(te(t)){const s=this._getLayersInflateSize(e,t.symbolLayers,r,o,a),i=C(t.effects);if(i>0&&(s[0]-=i,s[1]-=i,s[2]+=i,s[3]+=i),"CIMPointSymbol"===t.type){const e=this.getPointSymbolHaloPadding(t,r);e>0&&(s[0]-=e,s[1]-=e,s[2]+=e,s[3]+=e)}return s}return this._getTextInflatedSize(e,t,a)}static _getLayersInflateSize(e,t,r,o,a){let n=!0;if(!t)return e;for(const l of t){if(!l)continue;let t=[0,0,0,0];switch(l.type){case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":{const e=l;let r=e.width;null!=r&&("Square"===e.capStyle||"Miter"===e.joinStyle?r/=j:r/=2,t[0]=-r,t[1]=-r,t[2]=r,t[3]=r);break}case"CIMCharacterMarker":case"CIMVectorMarker":case"CIMPictureMarker":{const e=l;if("CIMVectorMarker"===l.type){const e=l;if(t=this._vectorMarkerBounds(t,e,r,a),e.frame){const r=(e.frame.xmin+e.frame.xmax)/2,o=(e.frame.ymin+e.frame.ymax)/2;if(t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o,null!=e.size){const r=e.size/(e.frame.ymax-e.frame.ymin);t[0]*=r,t[1]*=r,t[2]*=r,t[3]*=r}}}else if("CIMPictureMarker"===l.type){const o=l,a=r.getResource(o.url);let s=1;if(null!=a&&a.height&&(s=a.width/a.height),null!=e.size){const r=e.size/2,a=e.size*s*(o.scaleX??1)/2;t=[-a,-r,a,r]}}else if(null!=e.size){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]));const a=1.25*Math.sqrt(r*r+o*o);t[0]-=a,t[1]-=a,t[2]+=a,t[3]+=a}let n=g(e.rotation);if(e.rotateClockwise&&(n=-n),o&&(n-=o),n){const e=A*n,r=Math.cos(e),o=Math.sin(e),a=s([k,k,-k,-k]);i(a,[t[0]*r-t[1]*o,t[0]*o+t[1]*r]),i(a,[t[0]*r-t[3]*o,t[0]*o+t[3]*r]),i(a,[t[2]*r-t[1]*o,t[2]*o+t[1]*r]),i(a,[t[2]*r-t[3]*o,t[2]*o+t[3]*r]),t=a}let c=g(e.offsetX),m=g(e.offsetY);if(o){const e=A*o,t=Math.cos(e),r=Math.sin(e),a=c*r+m*t;c=c*t-m*r,m=a}t[0]+=c,t[1]+=m,t[2]+=c,t[3]+=m;const y=H(e.markerPlacement);y>0&&(t[0]-=y,t[1]-=y,t[2]+=y,t[3]+=y);break}}const c=C(l.effects);c>0&&(t[0]-=c,t[1]-=c,t[2]+=c,t[3]+=c),n?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],n=!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}static _getTextInflatedSize(e,t,r){const o=F(t.height??d.CIMTextSymbol.height);if(e[0]=-o/2,e[1]=-o/2,e[2]=o/2,e[3]=o/2,!r)return e;const a=r.get(t);if(!a)return e;if(!Y(a.glyphMosaicItems))return e;const{lineGapType:s,lineGap:i}=t,n=s?M(s,i??0,o):0,l=t.horizontalAlignment??d.CIMTextSymbol.horizontalalignment,c=t.verticalAlignment??d.CIMTextSymbol.verticalalignment,m="CIMBackgroundCallout"===t.callout?.type,y=z(a.glyphMosaicItems,{scale:o/P,angle:g(t.angle),xOffset:g(t.offsetX),yOffset:g(t.offsetY),horizontalAlignment:l,verticalAlignment:c,maxLineWidth:D(t.lineWidth),lineHeight:w*Math.max(.25,Math.min(n||1,4)),decoration:t.font.decoration||"none",useCIMAngleBehavior:!0,hasBackground:m}).boundsT,f=Math.sqrt(y.width*y.width+y.height*y.height);return e[0]-=y.x+f,e[1]-=y.y-f,e[2]+=y.x+f,e[3]+=-y.y+f,e}}function Y(e){return"glyphs"===e.type?e.glyphs.length>0:e.runs.some(e=>e.glyphs.glyphs.length>0)}class _{static getEnvelope(e,t,r,o){if(!e)return null;const a=new u(r,o);if(Array.isArray(e)){let r;for(const o of e)r?r.union(V(a,o,t)):r=V(a,o,t);return r}return V(a,e,t)}static expandEnvelopeForPointSymbolHalo(e,t,r,o=0){const a=N.getPointSymbolHaloPadding(t,r);if(a<=0)return;const s=a+o;e.x-=s,e.y-=s,e.width+=2*s,e.height+=2*s}static getTextureInfo(e,t,r,o,a,s=0){const i=o??this.getEnvelope(e,null,t);if(!i)return[0,0,0,0,1];const n=Math.max(i.width,i.height)*G;let l=null!=a?Math.max(a/n,1):1;l*=G,i.x*=l,i.y*=l,i.width*=l,i.height*=l,i.width=Math.max(Math.ceil(i.x+i.width)-Math.floor(i.x),1)-1,i.height=Math.max(Math.ceil(i.y+i.height)-Math.floor(i.y),1)-1;let c=i.x+.5*i.width,m=i.y+.5*i.height;if(c+=i.x-Math.floor(i.x),m+=i.y-Math.floor(i.y),!o){const e=Math.ceil(s*l);i.width+=r+2*e,i.height+=r+2*e,c+=r/2,m+=r/2}return[i.width,i.height,c,m,l]}static getTextureAnchor(e,t,r,o=0){const[a,s,i,n,l]=this.getTextureInfo(e,t,E,null,r,o);return[-i/a,-n/s,s/l*G]}static rasterize(e,t,r,o,a=!0,s,i=0){const[n,l,c,m,y]=this.getTextureInfo(t,o,E,r,s,i);e.width=n,e.height=l;const f=e.getContext("2d",{willReadFrequently:!0}),u=S.createScale(y,-y);u.translate(.5*n-c,.5*l+m);const M=new p(f,o,u);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 d=f.getImageData(0,0,e.width,e.height),g=new Uint8Array(d.data);if(a){let e;for(let t=0;t<g.length;t+=4)e=g[t+3]/255,g[t]=g[t]*e,g[t+1]=g[t+1]*e,g[t+2]=g[t+2]*e}return[g,e.width,e.height,-c/n,-m/l,y]}static fromTextSymbol(e){const{text:t}=e;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:_.createCIMTextSymbolfromTextSymbol(e),textString:t}],scaleSymbolsProportionally:!0,respectFrame:!0}],scaleX:1,angleAlignment:"Display"}}static fromPictureFillSymbol(e){const{height:t,outline:r,width:o,xoffset:a,xscale:s,yoffset:i,yscale:n}=e,l=[],c={type:"CIMPolygonSymbol",symbolLayers:l};if(r){const e=ae(r);e&&l.push(e)}let m=e.url;"esriPFS"===e.type&&e.imageData&&(m=e.imageData);const y="angle"in e?e.angle??0:0,f=(o??0)*(s||1),h=(t??0)*(n||1);return l.push({type:"CIMPictureFill",enable:!0,invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:m,height:h,width:f,offsetX:g(a),offsetY:g(i),rotation:g(-y),colorSubstitutions:null}),c}static fromSimpleFillSymbol(e){const{color:r,style:o,outline:s}=e,i=[],n={type:"CIMPolygonSymbol",symbolLayers:i};if(s){const e=ae(s);e&&i.push(e)}if(o&&"solid"!==o&&"none"!==o&&"esriSFSSolid"!==o&&"esriSFSNull"!==o){const e={type:"CIMLineSymbol",symbolLayers:[{type:"CIMSolidStroke",color:J(r),capStyle:"Butt",joinStyle:"Miter",width:.75}]};let s=0;const n=a(oe(o)?8:10);switch(o){case"vertical":case"esriSFSVertical":s=90;break;case"forward-diagonal":case"esriSFSForwardDiagonal":case"diagonal-cross":case"esriSFSDiagonalCross":s=-45;break;case"backward-diagonal":case"esriSFSBackwardDiagonal":s=45;break;case"cross":case"esriSFSCross":s=0}i.push({type:"CIMHatchFill",lineSymbol:e,offsetX:0,offsetY:0,rotation:s,separation:n}),"cross"===o||"esriSFSCross"===o?i.push({type:"CIMHatchFill",lineSymbol:t(e),offsetX:0,offsetY:0,rotation:90,separation:n}):"diagonal-cross"!==o&&"esriSFSDiagonalCross"!==o||i.push({type:"CIMHatchFill",lineSymbol:t(e),offsetX:0,offsetY:0,rotation:45,separation:n})}else!o||"solid"!==o&&"esriSFSSolid"!==o||i.push({type:"CIMSolidFill",enable:!0,color:J(r)});return n}static fromSimpleLineSymbol(e){const{cap:t,color:r,join:o,marker:a,miterLimit:s,style:i,width:n}=e;let l=null;"solid"!==i&&"none"!==i&&"esriSLSSolid"!==i&&"esriSLSNull"!==i&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:ee(i,t),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]);const c=[];if(a){let e;switch(a.placement){case"begin-end":e="Both";break;case"begin":e="JustBegin";break;case"end":e="JustEnd";break;default:e="None"}const t=_.fromSimpleMarker(a,n,r).symbolLayers[0];t.markerPlacement={type:"CIMMarkerPlacementAtExtremities",placePerPart:!1,angleToLine:!0,keepUpright:!1,offset:0,extremityPlacement:e,offsetAlongLine:0},c.push(t)}return c.push({type:"CIMSolidStroke",color:"none"!==i&&"esriSLSNull"!==i?J(r):[0,0,0,0],capStyle:q(t),joinStyle:O(o),miterLimit:s,width:n,effects:l}),{type:"CIMLineSymbol",symbolLayers:c}}static fromPictureMarker(e){const{angle:t,height:r,width:o,xoffset:a,yoffset:s}=e;let i=e.url;return"esriPMS"===e.type&&e.imageData&&(i=e.imageData),{type:"CIMPointSymbol",symbolLayers:[{type:"CIMPictureMarker",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:i,size:r,width:o,offsetX:g(a),offsetY:g(s),rotation:g(-t)}]}}static createCIMTextSymbolfromTextSymbol(t){const{angle:r,color:o,font:a,haloColor:s,haloSize:i,horizontalAlignment:n,kerning:l,lineWidth:c,text:m,verticalAlignment:y,xoffset:f,yoffset:h,backgroundColor:u,borderLineColor:p,borderLineSize:S}=t;let M,d,b,x,C,I;a&&(M=a.family,d=a.style,b=a.weight,x=a.size,C=a.decoration);let k=!1;if(m){k=e(m)[1]}return(u||S)&&(I={type:"CIMBackgroundCallout",margin:null,backgroundSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:J(u)},{type:"CIMSolidStroke",enable:!0,color:J(p),width:S??0}]},accentBarSymbol:null,gap:null,leaderLineSymbol:null,lineStyle:null}),{type:"CIMTextSymbol",angle:r,blockProgression:2,depth3D:1,extrapolateBaselines:!0,fontEffects:0,fontEncoding:1,fontFamilyName:M||"Arial",fontStyleName:K(d,b),fontType:0,haloSize:i,height:x,hinting:1,horizontalAlignment:$(n??"center"),kerning:l,letterWidth:100,ligatures:!0,lineGapType:"Multiple",lineWidth:c,offsetX:g(f),offsetY:g(h),strikethrough:"line-through"===C,underline:"underline"===C,symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:J(o)}]},haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:J(s)}]},shadowColor:[0,0,0,255],shadowOffsetX:1,shadowOffsetY:1,textCase:"Normal",textDirection:k?1:0,verticalAlignment:W(y??"baseline"),verticalGlyphOrientation:0,wordSpacing:100,billboardMode3D:2,callout:I}}static createPictureMarkerRasterizationParam(e){const{angle:t,height:r,width:o,xoffset:a,yoffset:s}=e,i=e.url??e.source?.url??e.source?.imageData;return i?{type:"sprite-rasterization-param",overrides:[],resource:{type:"CIMPictureMarker",enable:!0,invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:i,size:r,width:o,offsetX:g(a),offsetY:g(s),rotation:g(-t)}}:null}static createPictureFillRasterizationParam(e){const{width:t,height:r,xoffset:o,yoffset:a,url:s}=e;return s?{type:"sprite-rasterization-param",overrides:[],resource:{type:"CIMPictureFill",enable:!0,scaleX:1,textureFilter:"Picture",tintColor:null,url:s,width:t,height:r,offsetX:g(o),offsetY:g(a),rotation:0}}:null}static fromSimpleMarker(e,t,r){const{style:o}=e,a=e.color??r;if("path"===o||"esriSMSPath"===o){const t=[];if("outline"in e&&e.outline){const r=e.outline;t.push({type:"CIMSolidStroke",enable:!0,width:r.width,color:J(r.color),path:e.path})}t.push({type:"CIMSolidFill",enable:!0,color:J(a),path:e.path});const[r,o]=re("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),scaleSymbolsProportionally:!1,frame:r,markerGraphics:[{type:"CIMMarkerGraphic",geometry:o,symbol:{type:"CIMPolygonSymbol",symbolLayers:t}}]}]}}const s=[];let i,n,l=e.size;if("outline"in e&&e.outline&&"none"!==e.outline.style&&"esriSLSNull"!==e.outline.style){const t=e.outline,r="solid"!==t.style&&"esriSLSSolid"!==t.style;[i,n]=r?re(o,e.size):re(o);const a=t.width??I.width;if(r){const t=a/e.size,r=(i.xmax-i.xmin)*t/2,o=(i.ymax-i.ymin)*t/2;i.xmin-=r,i.xmax+=r,i.ymin-=o,i.ymax+=o,l&&(l+=a)}const c="cross"!==e.style&&"x"!==e.style||"dot"===e?.outline.style||"short-dot"===e?.outline.style?"HalfGap":"FullPattern",m=r?[{type:"CIMGeometricEffectAddControlPoints"},{type:"CIMGeometricEffectDashes",dashTemplate:ee(t.style,null).map(e=>t.width&&t.width>0?e*t.width:e),lineDashEnding:c,controlPointEnding:"FullPattern"}]:void 0;s.push({type:"CIMSolidStroke",capStyle:r?"Round":"Butt",enable:!0,width:a,color:J(t.color),effects:m})}else!t||"line-marker"!==e.type||"cross"!==e.style&&"x"!==e.style?[i,n]=re(o):([i,n]=re(o),s.push({type:"CIMSolidStroke",enable:!0,width:t,color:J(a)}));s.push({type:"CIMSolidFill",enable:!0,color:J(a)});const c={type:"CIMPolygonSymbol",symbolLayers:s};return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:g(-e.angle),size:g(l||6*t),offsetX:g(e.xoffset),offsetY:g(e.yoffset),scaleSymbolsProportionally:!1,frame:i,markerGraphics:[{type:"CIMMarkerGraphic",geometry:n,symbol:c}]}]}}static fromCIMHatchFill(e,r){const o=r*(e.separation??d.CIMHatchFill.separation),a=o/2,s=t(e.lineSymbol);s.symbolLayers?.forEach(e=>{switch(e.type){case"CIMSolidStroke":null!=e.width&&(e.width*=r),e.effects?.forEach(e=>{if("CIMGeometricEffectDashes"===e.type){const t=e.dashTemplate;e.dashTemplate=t?.map(e=>e*r)}});break;case"CIMVectorMarker":{null!=e.size&&(e.size*=r);const t=e.markerPlacement;null!=t&&"placementTemplate"in t&&(t.placementTemplate=t.placementTemplate.map(e=>e*r));break}}});let i=this._getLineSymbolPeriod(s)||R;for(;i<R;)i*=2;const n=i/2;return{type:"CIMVectorMarker",enable:!0,frame:{xmin:-n,xmax:n,ymin:-a,ymax:a},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{paths:[[[-n,0],[n,0]]]},symbol:s}],size:o}}static async normalizeSymbolAndFetchResources(e,t,r=null){if(!e)return;const o=[];if("effects"in e&&e.effects)for(const i of e.effects)o.push(y(i));o.push(s(e));const a=e=>{if(e.effects)for(const t of e.effects)o.push(y(t));if("CIMVectorMarker"===e.type){for(const t of e.markerGraphics)l(t.geometry)&&(t.geometry=c(t.geometry,{maxDeviation:.01}));e.markerPlacement&&o.push(f(e.markerPlacement))}"url"in e&&e.url&&o.push(t.fetchResource(e.url,{signal:r})),"symbol"in e&&o.push(s(e.symbol))};async function s(e){if("CIMTextSymbol"!==e.type)return;const{fontFamilyName:r,fontStyleName:o}=e;if("calcitewebcoreicons"===r?.toLowerCase())return;const{style:a,weight:s}=b(o),i=x(e),n=new m({family:r,style:a,weight:s,decoration:i});try{await t.loadFont(n)}catch{B().error(`Unsupported font ${r} in CIM symbol`)}}U(e,a),"haloSymbol"in e&&U(e.haloSymbol,a),await Promise.all(o)}static _getLineSymbolPeriod(e){if(e){const t=this._getEffectsRepeat(e.effects);if(t)return t;if(e.symbolLayers)for(const r of e.symbolLayers)if(r){const e=this._getEffectsRepeat(r.effects);if(e)return e;switch(r.type){case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":case"CIMObjectMarker3D":case"CIMglTFMarker3D":{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:B().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={...e};r.markerPlacement=null,r.anchorPoint=null;const s=Math.abs(t.stepX),i=Math.abs(t.stepY),n=(t.randomness??100)/100;let l,c,m,y;if("Random"===t.gridType){const e=a(L),r=Math.max(Math.floor(e/s),1),f=Math.max(Math.floor(e/i),1);l=r*s/2,c=f*i/2,m=2*c;const h=new o(t.seed),u=n*s/1.5,p=n*i/1.5;y=[];for(let t=0;t<r;t++)for(let e=0;e<f;e++){const r=t*s-l+u*(.5-h.getFloat()),o=e*i-c+p*(.5-h.getFloat());y.push({x:r,y:o}),0===t&&y.push({x:r+2*l,y:o}),0===e&&y.push({x:r,y:o+2*c})}}else!0===t.shiftOddRows?(l=s/2,c=i,m=2*i,y=[{x:-l,y:0},{x:l,y:0},{x:0,y:c},{x:0,y:-c}]):(l=s/2,c=i/2,m=i,y=[{x:-s,y:0},{x:0,y:-i},{x:-s,y:-i},{x:0,y:0},{x:s,y:0},{x:0,y:i},{x:s,y:i},{x:-s,y:i},{x:s,y:-i}]);return{type:"CIMVectorMarker",enable:!0,frame:{xmin:-l,xmax:l,ymin:-c,ymax:c},markerGraphics:y.map(e=>({type:"CIMMarkerGraphic",geometry:e,symbol:{type:"CIMPointSymbol",symbolLayers:[r]}})),size:m}}}function U(e,t){if(e)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const r=e.symbolLayers;if(!r)return;for(const e of r)if(t(e),"CIMVectorMarker"===e.type){const r=e.markerGraphics;if(!r)continue;for(const e of r)if(e){const r=e.symbol;r&&U(r,t)}}break}}}const q=e=>{if(!e)return"Butt";switch(e){case"butt":return"Butt";case"square":return"Square";case"round":return"Round"}},O=e=>{if(!e)return"Miter";switch(e){case"miter":return"Miter";case"round":return"Round";case"bevel":return"Bevel"}},$=e=>{if(null==e)return"Center";switch(e){case"left":return"Left";case"right":return"Right";case"center":return"Center";case"justify":return"Justify"}},W=e=>{if(null==e)return"Center";switch(e){case"baseline":return"Baseline";case"top":return"Top";case"middle":return"Center";case"bottom":return"Bottom"}},J=e=>{if(!e)return[0,0,0,0];const{r:t,g:r,b:o,a}=e;return[t,r,o,255*a]},K=(e,t)=>{const r=Q(t),o=Z(e);return r&&o?`${r}-${o}`:`${r}${o}`},Q=e=>{if(!e)return"";switch(e.toLowerCase()){case"bold":case"bolder":return"bold"}return""},Z=e=>{if(!e)return"";switch(e.toLowerCase()){case"italic":case"oblique":return"italic"}return""},ee=(e,t)=>{const r=.001,o="butt"===t;switch(e){case"dash":case"esriSLSDash":return o?[4,3]:[3,4];case"dash-dot":case"esriSLSDashDot":return o?[4,3,1,3]:[3,4,r,4];case"dot":case"esriSLSDot":return o?[1,3]:[r,4];case"long-dash":case"esriSLSLongDash":return o?[8,3]:[7,4];case"long-dash-dot":case"esriSLSLongDashDot":return o?[8,3,1,3]:[7,4,r,4];case"long-dash-dot-dot":case"esriSLSDashDotDot":return o?[8,3,1,3,1,3]:[7,4,r,4,r,4];case"short-dash":case"esriSLSShortDash":return o?[4,1]:[3,2];case"short-dash-dot":case"esriSLSShortDashDot":return o?[4,1,1,1]:[3,2,r,2];case"short-dash-dot-dot":case"esriSLSShortDashDotDot":return o?[4,1,1,1,1,1]:[3,2,r,2,r,2];case"short-dot":case"esriSLSShortDot":return o?[1,1]:[r,2];case"solid":case"esriSLSSolid":case"none":return B().error("Unexpected: style does not require rasterization"),[0,0];default:return B().error(`Tried to rasterize SLS, but found an unexpected style: ${e}!`),[0,0]}};function te(e){return void 0!==e.symbolLayers}const re=(e,t=100)=>{const r=t/2;let o,a;const s=e;if("circle"===s||"esriSMSCircle"===s){const e=.25;let t=Math.acos(1-e/r),s=Math.ceil(T/t/4);0===s&&(s=1),t=v/s,s*=4;const i=[];i.push([r,0]);for(let o=1;o<s;o++)i.push([r*Math.cos(o*t),-r*Math.sin(o*t)]);i.push([r,0]),o={rings:[i]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("cross"===s||"esriSMSCross"===s){const e=0;o={paths:[[[e,r],[e,-r]],[[r,e],[-r,e]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("diamond"===s||"esriSMSDiamond"===s)o={rings:[[[-r,0],[0,r],[r,0],[0,-r],[-r,0]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("square"===s||"esriSMSSquare"===s)o={rings:[[[-r,-r],[-r,r],[r,r],[r,-r],[-r,-r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("x"===s||"esriSMSX"===s)o={paths:[[[r,r],[-r,-r]],[[r,-r],[-r,r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("triangle"===s||"esriSMSTriangle"===s){const e=t*.5773502691896257,r=-e,s=2/3*t,i=s-t;o={rings:[[[r,i],[0,s],[e,i],[r,i]]]},a={xmin:r,ymin:i,xmax:e,ymax:s}}else"arrow"===s&&(o={rings:[[[-50,50],[50,0],[-50,-50],[-33,-20],[-33,20],[-50,50]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r});return[a,o]},oe=e=>"vertical"===e||"horizontal"===e||"cross"===e||"esriSFSCross"===e||"esriSFSVertical"===e||"esriSFSHorizontal"===e;function ae(e){if(!e)return null;let t=null;const{cap:r,color:o,join:a,miterLimit:s,style:i,width:n}=e;return"solid"!==i&&"none"!==i&&"esriSLSSolid"!==i&&"esriSLSNull"!==i&&(t=[{type:"CIMGeometricEffectDashes",dashTemplate:ee(i,r),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]),{type:"CIMSolidStroke",color:"esriSLSNull"!==i&&"none"!==i?J(o):[0,0,0,0],capStyle:q(r),joinStyle:O(a),miterLimit:s,width:n,effects:t}}export{_ as CIMSymbolHelper,N as CIMSymbolInflatedSizeHelper,q as capTypeToEnum,U as forEachSymbolLayer,ee as slsDashToTemplateArray,X as symbolToCIM};
|
|
2
|
+
import{bidiText as e}from"../../core/BidiText.js";import{clone as t}from"../../core/lang.js";import r from"../../core/Logger.js";import o from"../../core/RandomLCG.js";import{px2pt as a}from"../../core/screenUtils.js";import{create as s,expandPointInPlace as i}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as n}from"../../geometry/support/boundsUtils.js";import{isCurvedGeometry as l}from"../../geometry/support/curves/curveUtils.js";import{densifyCurvedGeometry as c}from"../../geometry/support/curves/densifyCurvedGeometry.js";import m from"../Font.js";import{loadGeometryOperatorsForEffect as y,loadGeometryOperatorsForPlacement as f}from"./CIMEffects.js";import{Placement as h}from"./CIMPlacements.js";import{EnvDrawHelper as u,CanvasDrawHelper as p,Transformation as S,lineGapType2LineHeight as M}from"./CIMSymbolDrawHelper.js";import{defaultCIMValues as d}from"./defaultCIMValues.js";import{fromCIMFontStyle as g}from"./fromCIMFontStyle.js";import{getNumericValue as b,fromCIMFontDecoration as x,getEffectsInflateSize as C}from"./utils.js";import{defaultPolylineSymbol2D as I}from"../support/defaults.js";import{cInfinity as k}from"../../views/2d/engine/vectorTiles/GeometryUtils.js";import{magicLabelLineHeight as w,glyphSize as P,randomInsidePolygonTextureSize as L}from"../../views/2d/engine/webgl/definitions.js";import{shapeTextResource as z}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";import{roundPtToWholePixel as F,getLineWidth as D}from"../../views/2d/layers/graphics/graphicsUtils.js";const T=Math.PI,v=T/2,A=Math.PI/180,G=96/72,j=1.4142135623730951,E=2,R=4,B=()=>r.getLogger("esri.symbols.cim.CIMSymbolHelper");function X(e){let t;switch(e.type){case"cim":return e.data;case"web-style":return e;case"simple-marker":{const r=_.fromSimpleMarker(e);if(!r)throw new Error("InternalError: Cannot convert symbol to CIM");t=r;break}case"picture-marker":t=_.fromPictureMarker(e);break;case"simple-line":t=_.fromSimpleLineSymbol(e);break;case"simple-fill":t=_.fromSimpleFillSymbol(e);break;case"picture-fill":t=_.fromPictureFillSymbol(e);break;case"text":t=_.fromTextSymbol(e)}return{type:"CIMSymbolReference",symbol:t}}function V(e,t,r){switch(t.type){case"CIMSymbolReference":return V(e,t.symbol,r);case"CIMPointSymbol":null==r&&(r={x:0,y:0}),e.drawSymbol(t,r);break;case"CIMLineSymbol":null==r&&(r={paths:[[[0,0],[10,0]]]}),e.drawSymbol(t,r);break;case"CIMPolygonSymbol":null==r&&(r={rings:[[[0,0],[0,10],[10,10],[10,0],[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??0);default:return 0}}class N{static getSymbolInflateSize(e,t,r,o,a){return e||(e=[0,0,0,0]),t?this._getInflateSize(e,t,r,o,a):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)}static getPointSymbolHaloPadding(e,t){const r=b(e.haloSize);if(r<=0||!e.haloSymbol?.symbolLayers?.some(e=>!1!==e.enable))return 0;const o=this.getSymbolInflateSize([0,0,0,0],e.haloSymbol,t,0,null);return r+this.safeSize(o)}static _vectorMarkerBounds(e,t,r,o){let a=!0;const i=s();if(t?.markerGraphics)for(const s of t.markerGraphics){const t=[0,0,0,0];s.geometry&&(n(i,s.geometry),t[0]=0,t[1]=0,t[2]=0,t[3]=0,this.getSymbolInflateSize(t,s.symbol,r,0,o),i[0]+=t[0],i[1]+=t[1],i[2]+=t[2],i[3]+=t[3],a?(e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],a=!1):(e[0]=Math.min(e[0],i[0]),e[1]=Math.min(e[1],i[1]),e[2]=Math.max(e[2],i[2]),e[3]=Math.max(e[3],i[3])))}return e}static _getInflateSize(e,t,r,o,a){if(te(t)){const s=this._getLayersInflateSize(e,t.symbolLayers,r,o,a),i=C(t.effects);if(i>0&&(s[0]-=i,s[1]-=i,s[2]+=i,s[3]+=i),"CIMPointSymbol"===t.type){const e=this.getPointSymbolHaloPadding(t,r);e>0&&(s[0]-=e,s[1]-=e,s[2]+=e,s[3]+=e)}return s}return this._getTextInflatedSize(e,t,a)}static _getLayersInflateSize(e,t,r,o,a){let n=!0;if(!t)return e;for(const l of t){if(!l)continue;let t=[0,0,0,0];switch(l.type){case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":{const e=l;let r=e.width;null!=r&&("Square"===e.capStyle||"Miter"===e.joinStyle?r/=j:r/=2,t[0]=-r,t[1]=-r,t[2]=r,t[3]=r);break}case"CIMCharacterMarker":case"CIMVectorMarker":case"CIMPictureMarker":{const e=l;if("CIMVectorMarker"===l.type){const e=l;if(t=this._vectorMarkerBounds(t,e,r,a),e.frame){const r=(e.frame.xmin+e.frame.xmax)/2,o=(e.frame.ymin+e.frame.ymax)/2;if(t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o,null!=e.size){const r=e.size/(e.frame.ymax-e.frame.ymin);t[0]*=r,t[1]*=r,t[2]*=r,t[3]*=r}}}else if("CIMPictureMarker"===l.type){const o=l,a=r.getResource(o.url);let s=1;if(null!=a&&a.height&&(s=a.width/a.height),null!=e.size){const r=e.size/2,a=e.size*s*(o.scaleX??1)/2;t=[-a,-r,a,r]}}else if(null!=e.size){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]));const a=1.25*Math.sqrt(r*r+o*o);t[0]-=a,t[1]-=a,t[2]+=a,t[3]+=a}let n=b(e.rotation);if(e.rotateClockwise&&(n=-n),o&&(n-=o),n){const e=A*n,r=Math.cos(e),o=Math.sin(e),a=s([k,k,-k,-k]);i(a,[t[0]*r-t[1]*o,t[0]*o+t[1]*r]),i(a,[t[0]*r-t[3]*o,t[0]*o+t[3]*r]),i(a,[t[2]*r-t[1]*o,t[2]*o+t[1]*r]),i(a,[t[2]*r-t[3]*o,t[2]*o+t[3]*r]),t=a}let c=b(e.offsetX),m=b(e.offsetY);if(o){const e=A*o,t=Math.cos(e),r=Math.sin(e),a=c*r+m*t;c=c*t-m*r,m=a}t[0]+=c,t[1]+=m,t[2]+=c,t[3]+=m;const y=H(e.markerPlacement);y>0&&(t[0]-=y,t[1]-=y,t[2]+=y,t[3]+=y);break}}const c=C(l.effects);c>0&&(t[0]-=c,t[1]-=c,t[2]+=c,t[3]+=c),n?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],n=!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}static _getTextInflatedSize(e,t,r){const o=F(t.height??d.CIMTextSymbol.height);if(e[0]=-o/2,e[1]=-o/2,e[2]=o/2,e[3]=o/2,!r)return e;const a=r.get(t);if(!a)return e;if(!Y(a.glyphMosaicItems))return e;const{lineGapType:s,lineGap:i}=t,n=s?M(s,i??0,o):0,l=t.horizontalAlignment??d.CIMTextSymbol.horizontalalignment,c=t.verticalAlignment??d.CIMTextSymbol.verticalalignment,m="CIMBackgroundCallout"===t.callout?.type,y=z(a.glyphMosaicItems,{scale:o/P,angle:b(t.angle),xOffset:b(t.offsetX),yOffset:b(t.offsetY),horizontalAlignment:l,verticalAlignment:c,maxLineWidth:D(t.lineWidth),lineHeight:w*Math.max(.25,Math.min(n||1,4)),decoration:t.font.decoration||"none",useCIMAngleBehavior:!0,hasBackground:m}).boundsT,f=Math.sqrt(y.width*y.width+y.height*y.height);return e[0]-=y.x+f,e[1]-=y.y-f,e[2]+=y.x+f,e[3]+=-y.y+f,e}}function Y(e){return"glyphs"===e.type?e.glyphs.length>0:e.runs.some(e=>e.glyphs.glyphs.length>0)}class _{static getEnvelope(e,t,r,o){if(!e)return null;const a=new u(r,o);if(Array.isArray(e)){let r;for(const o of e)r?r.union(V(a,o,t)):r=V(a,o,t);return r}return V(a,e,t)}static expandEnvelopeForPointSymbolHalo(e,t,r,o=0){const a=N.getPointSymbolHaloPadding(t,r);if(a<=0)return;const s=a+o;e.x-=s,e.y-=s,e.width+=2*s,e.height+=2*s}static getTextureInfo(e,t,r,o,a,s=0){const i=o??this.getEnvelope(e,null,t);if(!i)return[0,0,0,0,1];const n=Math.max(i.width,i.height)*G;let l=null!=a?Math.max(a/n,1):1;l*=G,i.x*=l,i.y*=l,i.width*=l,i.height*=l,i.width=Math.max(Math.ceil(i.x+i.width)-Math.floor(i.x),1)-1,i.height=Math.max(Math.ceil(i.y+i.height)-Math.floor(i.y),1)-1;let c=i.x+.5*i.width,m=i.y+.5*i.height;if(c+=i.x-Math.floor(i.x),m+=i.y-Math.floor(i.y),!o){const e=Math.ceil(s*l);i.width+=r+2*e,i.height+=r+2*e,c+=r/2,m+=r/2}return[i.width,i.height,c,m,l]}static getTextureAnchor(e,t,r,o=0){const[a,s,i,n,l]=this.getTextureInfo(e,t,E,null,r,o);return[-i/a,-n/s,s/l*G]}static rasterize(e,t,r,o,a=!0,s,i=0){const[n,l,c,m,y]=this.getTextureInfo(t,o,E,r,s,i);e.width=n,e.height=l;const f=e.getContext("2d",{willReadFrequently:!0}),u=S.createScale(y,-y);u.translate(.5*n-c,.5*l+m);const M=new p(f,o,u);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 d=f.getImageData(0,0,e.width,e.height),g=new Uint8Array(d.data);if(a){let e;for(let t=0;t<g.length;t+=4)e=g[t+3]/255,g[t]=g[t]*e,g[t+1]=g[t+1]*e,g[t+2]=g[t+2]*e}return[g,e.width,e.height,-c/n,-m/l,y]}static fromTextSymbol(e){const{text:t}=e;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:_.createCIMTextSymbolfromTextSymbol(e),textString:t}],scaleSymbolsProportionally:!0,respectFrame:!0}],scaleX:1,angleAlignment:"Display"}}static fromPictureFillSymbol(e){const{height:t,outline:r,width:o,xoffset:a,xscale:s,yoffset:i,yscale:n}=e,l=[],c={type:"CIMPolygonSymbol",symbolLayers:l};if(r){const e=ae(r);e&&l.push(e)}let m=e.url;"esriPFS"===e.type&&e.imageData&&(m=e.imageData);const y="angle"in e?e.angle??0:0,f=(o??0)*(s||1),h=(t??0)*(n||1);return l.push({type:"CIMPictureFill",enable:!0,invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:m,height:h,width:f,offsetX:b(a),offsetY:b(i),rotation:b(-y),colorSubstitutions:null}),c}static fromSimpleFillSymbol(e){const{color:r,style:o,outline:s}=e,i=[],n={type:"CIMPolygonSymbol",symbolLayers:i};if(s){const e=ae(s);e&&i.push(e)}if(o&&"solid"!==o&&"none"!==o&&"esriSFSSolid"!==o&&"esriSFSNull"!==o){const e={type:"CIMLineSymbol",symbolLayers:[{type:"CIMSolidStroke",color:J(r),capStyle:"Butt",joinStyle:"Miter",width:.75}]};let s=0;const n=a(oe(o)?8:10);switch(o){case"vertical":case"esriSFSVertical":s=90;break;case"forward-diagonal":case"esriSFSForwardDiagonal":case"diagonal-cross":case"esriSFSDiagonalCross":s=-45;break;case"backward-diagonal":case"esriSFSBackwardDiagonal":s=45;break;case"cross":case"esriSFSCross":s=0}i.push({type:"CIMHatchFill",lineSymbol:e,offsetX:0,offsetY:0,rotation:s,separation:n}),"cross"===o||"esriSFSCross"===o?i.push({type:"CIMHatchFill",lineSymbol:t(e),offsetX:0,offsetY:0,rotation:90,separation:n}):"diagonal-cross"!==o&&"esriSFSDiagonalCross"!==o||i.push({type:"CIMHatchFill",lineSymbol:t(e),offsetX:0,offsetY:0,rotation:45,separation:n})}else!o||"solid"!==o&&"esriSFSSolid"!==o||i.push({type:"CIMSolidFill",enable:!0,color:J(r)});return n}static fromSimpleLineSymbol(e){const{cap:t,color:r,join:o,marker:a,miterLimit:s,style:i,width:n}=e;let l=null;"solid"!==i&&"none"!==i&&"esriSLSSolid"!==i&&"esriSLSNull"!==i&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:ee(i,t),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]);const c=[];if(a){let e;switch(a.placement){case"begin-end":e="Both";break;case"begin":e="JustBegin";break;case"end":e="JustEnd";break;default:e="None"}const t=_.fromSimpleMarker(a,n,r).symbolLayers[0];t.markerPlacement={type:"CIMMarkerPlacementAtExtremities",placePerPart:!1,angleToLine:!0,keepUpright:!1,offset:0,extremityPlacement:e,offsetAlongLine:0},c.push(t)}return c.push({type:"CIMSolidStroke",color:"none"!==i&&"esriSLSNull"!==i?J(r):[0,0,0,0],capStyle:q(t),joinStyle:O(o),miterLimit:s,width:n,effects:l}),{type:"CIMLineSymbol",symbolLayers:c}}static fromPictureMarker(e){const{angle:t,height:r,width:o,xoffset:a,yoffset:s}=e;let i=e.url;return"esriPMS"===e.type&&e.imageData&&(i=e.imageData),{type:"CIMPointSymbol",symbolLayers:[{type:"CIMPictureMarker",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:i,size:r,width:o,offsetX:b(a),offsetY:b(s),rotation:b(-t)}]}}static createCIMTextSymbolfromTextSymbol(t){const{angle:r,color:o,font:a,haloColor:s,haloSize:i,horizontalAlignment:n,kerning:l,lineWidth:c,text:m,verticalAlignment:y,xoffset:f,yoffset:h,backgroundColor:u,borderLineColor:p,borderLineSize:S}=t;let M,d,g,x,C,I;a&&(M=a.family,d=a.style,g=a.weight,x=a.size,C=a.decoration);let k=!1;if(m){k=e(m)[1]}return(u||S)&&(I={type:"CIMBackgroundCallout",margin:null,backgroundSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:J(u)},{type:"CIMSolidStroke",enable:!0,color:J(p),width:S??0}]},accentBarSymbol:null,gap:null,leaderLineSymbol:null,lineStyle:null}),{type:"CIMTextSymbol",angle:r,blockProgression:2,depth3D:1,extrapolateBaselines:!0,fontEffects:0,fontEncoding:1,fontFamilyName:M||"Arial",fontStyleName:K(d,g),fontType:0,haloSize:i,height:x,hinting:1,horizontalAlignment:$(n??"center"),kerning:l,letterWidth:100,ligatures:!0,lineGapType:"Multiple",lineWidth:c,offsetX:b(f),offsetY:b(h),strikethrough:"line-through"===C,underline:"underline"===C,symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:J(o)}]},haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:J(s)}]},shadowColor:[0,0,0,255],shadowOffsetX:1,shadowOffsetY:1,textCase:"Normal",textDirection:k?1:0,verticalAlignment:W(y??"baseline"),verticalGlyphOrientation:0,wordSpacing:100,billboardMode3D:2,callout:I}}static createPictureMarkerRasterizationParam(e){const{angle:t,height:r,width:o,xoffset:a,yoffset:s}=e,i=e.url??e.source?.url??e.source?.imageData;return i?{type:"sprite-rasterization-param",overrides:[],resource:{type:"CIMPictureMarker",enable:!0,invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:i,size:r,width:o,offsetX:b(a),offsetY:b(s),rotation:b(-t)}}:null}static createPictureFillRasterizationParam(e){const{width:t,height:r,xoffset:o,yoffset:a,url:s}=e;return s?{type:"sprite-rasterization-param",overrides:[],resource:{type:"CIMPictureFill",enable:!0,scaleX:1,textureFilter:"Picture",tintColor:null,url:s,width:t,height:r,offsetX:b(o),offsetY:b(a),rotation:0}}:null}static fromSimpleMarker(e,t,r){const{style:o}=e,a=e.color??r;if("path"===o||"esriSMSPath"===o){const t=[];if("outline"in e&&e.outline){const r=e.outline;t.push({type:"CIMSolidStroke",enable:!0,width:r.width,color:J(r.color),path:e.path})}t.push({type:"CIMSolidFill",enable:!0,color:J(a),path:e.path});const[r,o]=re("square");return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:-b(e.angle),size:b(e.size||6),offsetX:b(e.xoffset),offsetY:b(e.yoffset),scaleSymbolsProportionally:!1,frame:r,markerGraphics:[{type:"CIMMarkerGraphic",geometry:o,symbol:{type:"CIMPolygonSymbol",symbolLayers:t}}]}]}}const s=[];let i,n,l=e.size;if("outline"in e&&e.outline&&"none"!==e.outline.style&&"esriSLSNull"!==e.outline.style){const t=e.outline,r="solid"!==t.style&&"esriSLSSolid"!==t.style;[i,n]=r?re(o,e.size):re(o);const a=t.width??I.width;if(r){const t=a/e.size,r=(i.xmax-i.xmin)*t/2,o=(i.ymax-i.ymin)*t/2;i.xmin-=r,i.xmax+=r,i.ymin-=o,i.ymax+=o,l&&(l+=a)}const c="cross"!==e.style&&"x"!==e.style||"dot"===e?.outline.style||"short-dot"===e?.outline.style?"HalfGap":"FullPattern",m=r?[{type:"CIMGeometricEffectAddControlPoints"},{type:"CIMGeometricEffectDashes",dashTemplate:ee(t.style,null).map(e=>t.width&&t.width>0?e*t.width:e),lineDashEnding:c,controlPointEnding:"FullPattern"}]:void 0;s.push({type:"CIMSolidStroke",capStyle:r?"Round":"Butt",enable:!0,width:a,color:J(t.color),effects:m})}else!t||"line-marker"!==e.type||"cross"!==e.style&&"x"!==e.style?[i,n]=re(o):([i,n]=re(o),s.push({type:"CIMSolidStroke",enable:!0,width:t,color:J(a)}));s.push({type:"CIMSolidFill",enable:!0,color:J(a)});const c={type:"CIMPolygonSymbol",symbolLayers:s};return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:b(-e.angle),size:b(l||6*t),offsetX:b(e.xoffset),offsetY:b(e.yoffset),scaleSymbolsProportionally:!1,frame:i,markerGraphics:[{type:"CIMMarkerGraphic",geometry:n,symbol:c}]}]}}static fromCIMHatchFill(e,r){const o=r*(e.separation??d.CIMHatchFill.separation),a=o/2,s=t(e.lineSymbol);s.symbolLayers?.forEach(e=>{switch(e.type){case"CIMSolidStroke":null!=e.width&&(e.width*=r),e.effects?.forEach(e=>{if("CIMGeometricEffectDashes"===e.type){const t=e.dashTemplate;e.dashTemplate=t?.map(e=>e*r)}});break;case"CIMVectorMarker":{null!=e.size&&(e.size*=r);const t=e.markerPlacement;null!=t&&"placementTemplate"in t&&(t.placementTemplate=t.placementTemplate.map(e=>e*r));break}}});let i=this._getLineSymbolPeriod(s)||R;for(;i<R;)i*=2;const n=i/2;return{type:"CIMVectorMarker",enable:!0,frame:{xmin:-n,xmax:n,ymin:-a,ymax:a},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{paths:[[[-n,0],[n,0]]]},symbol:s}],size:o}}static async normalizeSymbolAndFetchResources(e,t,r=null){if(!e)return;const o=[];if("effects"in e&&e.effects)for(const i of e.effects)o.push(y(i));o.push(s(e));const a=e=>{if(e.effects)for(const t of e.effects)o.push(y(t));if("CIMVectorMarker"===e.type){for(const t of e.markerGraphics)l(t.geometry)&&(t.geometry=c(t.geometry,{maxDeviation:.01}));e.markerPlacement&&o.push(f(e.markerPlacement))}"url"in e&&e.url&&o.push(t.fetchResource(e.url,{signal:r})),"symbol"in e&&o.push(s(e.symbol))};async function s(e){if("CIMTextSymbol"!==e.type)return;const{fontFamilyName:r,fontStyleName:o}=e;if("calcitewebcoreicons"===r?.toLowerCase())return;const{style:a,weight:s}=g(o),i=x(e),n=new m({family:r,style:a,weight:s,decoration:i});try{await t.loadFont(n)}catch{B().error(`Unsupported font ${r} in CIM symbol`)}}U(e,a),"haloSymbol"in e&&U(e.haloSymbol,a),await Promise.all(o)}static _getLineSymbolPeriod(e){if(e){const t=this._getEffectsRepeat(e.effects);if(t)return t;if(e.symbolLayers)for(const r of e.symbolLayers)if(r){const e=this._getEffectsRepeat(r.effects);if(e)return e;switch(r.type){case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":case"CIMObjectMarker3D":case"CIMglTFMarker3D":{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:B().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={...e};r.markerPlacement=null,r.anchorPoint=null;const s=Math.abs(t.stepX),i=Math.abs(t.stepY),n=(t.randomness??100)/100;let l,c,m,y;if("Random"===t.gridType){const e=a(L),r=Math.max(Math.floor(e/s),1),f=Math.max(Math.floor(e/i),1);l=r*s/2,c=f*i/2,m=2*c;const h=new o(t.seed),u=n*s/1.5,p=n*i/1.5;y=[];for(let t=0;t<r;t++)for(let e=0;e<f;e++){const r=t*s-l+u*(.5-h.getFloat()),o=e*i-c+p*(.5-h.getFloat());y.push({x:r,y:o}),0===t&&y.push({x:r+2*l,y:o}),0===e&&y.push({x:r,y:o+2*c})}}else!0===t.shiftOddRows?(l=s/2,c=i,m=2*i,y=[{x:-l,y:0},{x:l,y:0},{x:0,y:c},{x:0,y:-c}]):(l=s/2,c=i/2,m=i,y=[{x:-s,y:0},{x:0,y:-i},{x:-s,y:-i},{x:0,y:0},{x:s,y:0},{x:0,y:i},{x:s,y:i},{x:-s,y:i},{x:s,y:-i}]);return{type:"CIMVectorMarker",enable:!0,frame:{xmin:-l,xmax:l,ymin:-c,ymax:c},markerGraphics:y.map(e=>({type:"CIMMarkerGraphic",geometry:e,symbol:{type:"CIMPointSymbol",symbolLayers:[r]}})),size:m}}}function U(e,t){if(e)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const r=e.symbolLayers;if(!r)return;for(const e of r)if(t(e),"CIMVectorMarker"===e.type){const r=e.markerGraphics;if(!r)continue;for(const e of r)if(e){const r=e.symbol;r&&U(r,t)}}break}}}const q=e=>{if(!e)return"Butt";switch(e){case"butt":return"Butt";case"square":return"Square";case"round":return"Round"}},O=e=>{if(!e)return"Miter";switch(e){case"miter":return"Miter";case"round":return"Round";case"bevel":return"Bevel"}},$=e=>{if(null==e)return"Center";switch(e){case"left":return"Left";case"right":return"Right";case"center":return"Center";case"justify":return"Justify"}},W=e=>{if(null==e)return"Center";switch(e){case"baseline":return"Baseline";case"top":return"Top";case"middle":return"Center";case"bottom":return"Bottom"}},J=e=>{if(!e)return[0,0,0,0];const{r:t,g:r,b:o,a}=e;return[t,r,o,255*a]},K=(e,t)=>{const r=Q(t),o=Z(e);return r&&o?`${r}-${o}`:`${r}${o}`},Q=e=>{if(!e)return"";switch(e.toLowerCase()){case"bold":case"bolder":return"bold"}return""},Z=e=>{if(!e)return"";switch(e.toLowerCase()){case"italic":case"oblique":return"italic"}return""},ee=(e,t)=>{const r=.001,o="butt"===t;switch(e){case"dash":case"esriSLSDash":return o?[4,3]:[3,4];case"dash-dot":case"esriSLSDashDot":return o?[4,3,1,3]:[3,4,r,4];case"dot":case"esriSLSDot":return o?[1,3]:[r,4];case"long-dash":case"esriSLSLongDash":return o?[8,3]:[7,4];case"long-dash-dot":case"esriSLSLongDashDot":return o?[8,3,1,3]:[7,4,r,4];case"long-dash-dot-dot":case"esriSLSDashDotDot":return o?[8,3,1,3,1,3]:[7,4,r,4,r,4];case"short-dash":case"esriSLSShortDash":return o?[4,1]:[3,2];case"short-dash-dot":case"esriSLSShortDashDot":return o?[4,1,1,1]:[3,2,r,2];case"short-dash-dot-dot":case"esriSLSShortDashDotDot":return o?[4,1,1,1,1,1]:[3,2,r,2,r,2];case"short-dot":case"esriSLSShortDot":return o?[1,1]:[r,2];case"solid":case"esriSLSSolid":case"none":return B().error("Unexpected: style does not require rasterization"),[0,0];default:return B().error(`Tried to rasterize SLS, but found an unexpected style: ${e}!`),[0,0]}};function te(e){return void 0!==e.symbolLayers}const re=(e,t=100)=>{const r=t/2;let o,a;const s=e;if("circle"===s||"esriSMSCircle"===s){const e=.25;let t=Math.acos(1-e/r),s=Math.ceil(T/t/4);0===s&&(s=1),t=v/s,s*=4;const i=[];i.push([r,0]);for(let o=1;o<s;o++)i.push([r*Math.cos(o*t),-r*Math.sin(o*t)]);i.push([r,0]),o={rings:[i]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("cross"===s||"esriSMSCross"===s){const e=0;o={paths:[[[e,r],[e,-r]],[[r,e],[-r,e]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("diamond"===s||"esriSMSDiamond"===s)o={rings:[[[-r,0],[0,r],[r,0],[0,-r],[-r,0]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("square"===s||"esriSMSSquare"===s)o={rings:[[[-r,-r],[-r,r],[r,r],[r,-r],[-r,-r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("x"===s||"esriSMSX"===s)o={paths:[[[r,r],[-r,-r]],[[r,-r],[-r,r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("triangle"===s||"esriSMSTriangle"===s){const e=t*.5773502691896257,r=-e,s=2/3*t,i=s-t;o={rings:[[[r,i],[0,s],[e,i],[r,i]]]},a={xmin:r,ymin:i,xmax:e,ymax:s}}else"arrow"===s&&(o={rings:[[[-50,50],[50,0],[-50,-50],[-33,-20],[-33,20],[-50,50]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r});return[a,o]},oe=e=>"vertical"===e||"horizontal"===e||"cross"===e||"esriSFSCross"===e||"esriSFSVertical"===e||"esriSFSHorizontal"===e;function ae(e){if(!e)return null;let t=null;const{cap:r,color:o,join:a,miterLimit:s,style:i,width:n}=e;return"solid"!==i&&"none"!==i&&"esriSLSSolid"!==i&&"esriSLSNull"!==i&&(t=[{type:"CIMGeometricEffectDashes",dashTemplate:ee(i,r),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]),{type:"CIMSolidStroke",color:"esriSLSNull"!==i&&"none"!==i?J(o):[0,0,0,0],capStyle:q(r),joinStyle:O(a),miterLimit:s,width:n,effects:t}}export{_ as CIMSymbolHelper,N as CIMSymbolInflatedSizeHelper,q as capTypeToEnum,U as forEachSymbolLayer,ee as slsDashToTemplateArray,X as symbolToCIM};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import e from"../../Color.js";import{isRGB as r}from"../../core/colorUtils.js";import{clone as i}from"../../core/lang.js";import s from"../../layers/support/FieldsIndex.js";import{createRendererExpression as t}from"../../support/ArcadeExpression.js";import{normalizeDashEffectTemplate as o
|
|
2
|
+
import e from"../../Color.js";import{isRGB as r}from"../../core/colorUtils.js";import{clone as i}from"../../core/lang.js";import s from"../../layers/support/FieldsIndex.js";import{createRendererExpression as t}from"../../support/ArcadeExpression.js";import{normalizeDashEffectTemplate as o}from"./dashUtils.js";import{toLowerCaseProps as a,normalizePrimitiveOverrideProps as c,attributesToFields as l,analyzeTextParts as n,assignTextValuesFromFeature as p,uncapitalize as f}from"./utils.js";import m from"../../views/2d/arcade/callExpressionWithFeature.js";const y=e=>{if(!e)return[0,0,0,0];const{r,g:i,b:s,a:t}=e;return[r,i,s,255*t]};class v{static findApplicableOverrides(e,r,i){if(e&&r){if(e.primitiveName){let s=!1;for(const r of i)if(r.primitiveName===e.primitiveName){s=!0;break}if(!s)for(const t of r)t.primitiveName===e.primitiveName&&i.push(t)}switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":if(e.effects)for(const s of e.effects)v.findApplicableOverrides(s,r,i);if(e.symbolLayers)for(const s of e.symbolLayers)v.findApplicableOverrides(s,r,i);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 s of e.effects)v.findApplicableOverrides(s,r,i);if(e.markerPlacement&&v.findApplicableOverrides(e.markerPlacement,r,i),"CIMVectorMarker"===e.type){if(e.markerGraphics)for(const s of e.markerGraphics)v.findApplicableOverrides(s,r,i),v.findApplicableOverrides(s.symbol,r,i)}else"CIMCharacterMarker"===e.type?v.findApplicableOverrides(e.symbol,r,i):"CIMHatchFill"===e.type?v.findApplicableOverrides(e.lineSymbol,r,i):"CIMPictureMarker"===e.type&&v.findApplicableOverrides(e.animatedSymbolProperties,r,i)}}}static findEffectOverrides(e,r){if(!e)return null;if("CIMGeometricEffectDashes"===e.type&&o(e),!r||!e.primitiveName)return{type:"cim-effect-param",effect:e,overrides:[]};const i=a(e),s=e.primitiveName,t=[];for(const o of r)o.primitiveName===s&&t.push(a(o));return{type:"cim-effect-param",effect:i,overrides:c(t)}}static async resolveSymbolOverrides(e,r,t,o,a,c,n){if(!e?.symbol)return null;let{symbol:p,primitiveOverrides:f}=e;const m=!!f;if(!m&&!o)return p;p=i(p),f=i(f);let y=!0;if(r||(r={attributes:{}},y=!1),m){if(y||(f=f.filter(e=>!e.valueExpressionInfo?.expression.includes("$feature"))),n||(f=f.filter(e=>!e.valueExpressionInfo?.expression.includes("$view"))),f.length>0){const e=l(r.attributes),i={spatialReference:t,fields:e,geometryType:a};await v.createRenderExpressions(f,i),v.evaluateOverrides(f,r,a??"esriGeometryPoint",c,n,new s(e))}v.applyOverrides(p,f)}return o&&v.applyDictionaryTextOverrides(p,r,o,null),p}static{this._expressionToRenderExpression=new Map}static async createRenderExpressions(e,r){const i=[];for(const s of e){const e=s.valueExpressionInfo;if(!e||v._expressionToRenderExpression.has(e.expression))continue;const o=t(e.expression,r.spatialReference);i.push(o),o.then(r=>v._expressionToRenderExpression.set(e.expression,r))}i.length>0&&await Promise.all(i)}static evaluateOverrides(e,i,s,t,o,a){const c={$view:{scale:o?.scale}};for(const l of e){l.value&&"object"==typeof l.value&&r(l.value)&&("Color"===l.propertyName||"StrokeColor"===l.propertyName)&&(l.value=y(l.value));const e=l.valueExpressionInfo;if(!e)continue;const o=v._expressionToRenderExpression.get(e.expression);o&&(l.value=m(o,i,c,s,a,t))}}static applyDictionaryTextOverrides(e,r,i,s,t="Normal"){if(e?.type)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":case"CIMTextSymbol":{const o=e.symbolLayers;if(!o)return;for(const a of o)a&&"CIMVectorMarker"===a.type&&v.applyDictionaryTextOverrides(a,r,i,s,"CIMTextSymbol"===e.type?e.textCase:t)}break;case"CIMVectorMarker":{const t=e.markerGraphics;if(!t)return;for(const e of t)e&&v.applyDictionaryTextOverrides(e,r,i,s)}break;case"CIMMarkerGraphic":{const o=e.textString;if(o&&o.includes("[")){const a=n(o,i);e.textString=p(r,a,s,t)}}}}static applyOverrides(e,r,i,s){if(e.primitiveName)for(const t of r)if(t.primitiveName===e.primitiveName){const r=f(t.propertyName);if(s&&s.push({cim:e,nocapPropertyName:r,value:e[r]}),i){let r=!1;for(const s of i)s.primitiveName===e.primitiveName&&(r=!0);r||i.push(t)}null!=t.value&&(e[r]=t.value)}switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":if(e.effects)for(const t of e.effects)v.applyOverrides(t,r,i,s);if(e.symbolLayers)for(const t of e.symbolLayers)v.applyOverrides(t,r,i,s);break;case"CIMTextSymbol":break;case"CIMSolidStroke":case"CIMSolidFill":case"CIMVectorMarker":if(e.effects)for(const t of e.effects)v.applyOverrides(t,r,i,s);if("CIMVectorMarker"===e.type&&e.markerGraphics)for(const t of e.markerGraphics)v.applyOverrides(t,r,i,s),v.applyOverrides(t.symbol,r,i,s)}}static restoreOverrides(e){for(const r of e)r.cim[r.nocapPropertyName]=r.value}static buildOverrideKey(e){let r="";for(const i of e)void 0!==i.value&&(r+=`${i.primitiveName}${i.propertyName}${JSON.stringify(i.value)}`);return r}static toValue(r,i){if("DashTemplate"===r)return i.split(" ").map(e=>Number(e));if("Color"===r){const r=new e(i).toRgba();return r[3]*=255,r}return i}}export{v as OverrideHelper};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{CanvasDrawHelper as e,Transformation as r}from"./CIMSymbolDrawHelper.js";import{CIMSymbolHelper as t,CIMSymbolInflatedSizeHelper as a}from"./CIMSymbolHelper.js";import{
|
|
2
|
+
import{CanvasDrawHelper as e,Transformation as r}from"./CIMSymbolDrawHelper.js";import{CIMSymbolHelper as t,CIMSymbolInflatedSizeHelper as a}from"./CIMSymbolHelper.js";import{normalizeDashTemplate as n}from"./dashUtils.js";import{createPointSymbolHaloSilhouette as s}from"./pointSymbolHaloUtils.js";import{rasterizeFillStyle as o,rasterizeDash1D as i,rasterizeGradient as l,createHaloImage as c,createAlphaMaskRings as m,applyAlphaMask as f,createHaloSDF as h}from"./rasterizingUtils.js";import d from"./Rect.js";import{getSDFInfo as u,buildSDF as M}from"./SDFHelper.js";import{resampleHermite as g}from"./utils.js";import{rasterizedVectorMarkerMinSize as y,patternFillRasterizationScale as C}from"../../views/2d/engine/webgl/definitions.js";const p=512;class I{constructor(e){this._resourceManager=e,this._cachedRasterizationCanvas=null}dispose(){this._cachedRasterizationCanvas=null}get _canvas(){return this._cachedRasterizationCanvas||(this._cachedRasterizationCanvas=document.createElement("canvas")),this._cachedRasterizationCanvas}rasterizeJSONResource(e){switch(e.type){case"dash":{const r=n(e.dashTemplate),[t,a,s]=i(r);return{size:[a,s],image:new Uint32Array(t.buffer),sdf:!0,simplePattern:!0,anchorX:0,anchorY:0}}case"fill-style":{const[r,t,a,n]=o(this._canvas,e,C);return{size:[t,a],image:new Uint32Array(r.buffer),sdf:!1,simplePattern:!0,anchorX:0,anchorY:0,rasterizationScale:n}}case"sdf":return b(e);case"CIMGradientFill":case"CIMGradientStroke":case"CIMHatchFill":case"CIMPictureMarker":case"CIMVectorMarker":return this._rasterizeCIMJSONResource(e);case"cim-point-symbol-halo":return this._rasterizeCIMPointSymbolHalo(e)}}_rasterizeCIMJSONResource(e){switch(e.type){case"CIMGradientFill":case"CIMGradientStroke":{const[r,t,a]=l(this._canvas,e);return{size:[t,a],image:new Uint32Array(r.buffer),sdf:!1,simplePattern:!1,anchorX:0,anchorY:0,samplingMode:"Discrete"===e.gradientType||"CIMFixedColorRamp"===e.colorRamp.type?"Nearest":"Linear"}}case"CIMHatchFill":{const r=t.fromCIMHatchFill(e,C);return this._rasterizeCIMVectorMarker(r)}case"CIMPictureMarker":{const r=t.fromCIMInsidePolygon(e);return this._rasterizeCIMVectorMarker(r)}case"CIMVectorMarker":{if("CIMMarkerPlacementInsidePolygon"===e.markerPlacement?.type){const r=t.fromCIMInsidePolygon(e);return this._rasterizeCIMVectorMarker(r)}const r=u(e);return r&&!e.avoidSDFRasterization?b(r):this._rasterizeCIMVectorMarker(e,!1,y)}}}_rasterizeCIMVectorMarker(e,r=!0,a){const n=r?d.fromExtent(e.frame):null,[s,o,i,l,c]=t.rasterize(this._canvas,e,n,this._resourceManager,!0,a);return s?{size:[o,i],image:new Uint32Array(s.buffer),sdf:!1,simplePattern:!1,anchorX:l,anchorY:c}:null}_rasterizeCIMPointSymbolHalo(n){const{symbol:o}=n,i=o.haloSize??0;if(i<=0)return null;const l=s({...o,haloSize:0,haloSymbol:void 0}),d=a.getPointSymbolHaloPadding(o,this._resourceManager),[u,M,g,C,p,I]=t.rasterize(this._canvas,l,null,this._resourceManager,!1,y,d);if(!u)return null;const b=i*I,P=o.haloSymbol?.symbolLayers?.filter(e=>!1!==e.enable)??[],w=1===P.length&&"CIMSolidFill"===P[0].type;if(!n.sdf&&w)return{size:[M,g],image:new Uint32Array(c(u,M,g,b).buffer),sdf:!1,simplePattern:!1,anchorX:C,anchorY:p};if(!n.sdf){const t=c(u,M,g,b),a=m(t,M,g);if(0===a.length||!o.haloSymbol)return null;const n=-C*M,s=-p*g,i=r.createScale(I,-I);i.translate(.5*M-n,.5*g+s);const l=i.invert(),h={type:"polygon",rings:a.map(e=>e.map(e=>l.transform(e)))},d=this._canvas.getContext("2d",{willReadFrequently:!0});d.clearRect(0,0,M,g),new e(d,this._resourceManager,i,!0).drawSymbol(o.haloSymbol,h);const y=d.getImageData(0,0,M,g).data,P=z(o.haloSymbol)?y:f(y,t);return{size:[M,g],image:new Uint32Array(P.buffer),sdf:!1,simplePattern:!1,anchorX:C,anchorY:p}}const{image:_,encodingRadius:S}=h(u,M,g,b);return{size:[M,g],image:new Uint32Array(_.buffer),sdf:!0,simplePattern:!1,anchorX:C,anchorY:p,sdfPaddingRatio:0,sdfDecodeCoeff:2*S/g}}rasterizeImageResource(e,r,t,a){this._canvas.width=e,this._canvas.height=r;const n=this._canvas.getContext("2d",{willReadFrequently:!0});t instanceof ImageData?n.putImageData(t,0,0):(t.setAttribute("width",`${e}px`),t.setAttribute("height",`${r}px`),n.drawImage(t,0,0,e,r));const s=n.getImageData(0,0,e,r),o=new Uint8Array(s.data);if(a)for(const h of a)if(h&&h.oldColor&&4===h.oldColor.length&&h.newColor&&4===h.newColor.length){const[e,r,t,a]=h.oldColor,[n,s,i,l]=h.newColor;if(e===n&&r===s&&t===i&&a===l)continue;for(let c=0;c<o.length;c+=4)e===o[c]&&r===o[c+1]&&t===o[c+2]&&a===o[c+3]&&(o[c]=n,o[c+1]=s,o[c+2]=i,o[c+3]=l)}let i;for(let h=0;h<o.length;h+=4)i=o[h+3]/255,o[h]=o[h]*i,o[h+1]=o[h+1]*i,o[h+2]=o[h+2]*i;let l=o,c=e,m=r;const f=p;if(c>=f||m>=f){const t=c/m;t>1?(c=f,m=Math.round(f/t)):(m=f,c=Math.round(f*t)),l=new Uint8Array(4*c*m);const a=new Uint8ClampedArray(l.buffer);g(o,e,r,a,c,m,!1)}return{size:[c,m],image:new Uint32Array(l.buffer),sdf:!1,simplePattern:!1,anchorX:0,anchorY:0}}}function z(e){return e.symbolLayers?.some(e=>{if(!1===e.enable||"CIMCharacterMarker"!==e.type&&"CIMPictureMarker"!==e.type&&"CIMVectorMarker"!==e.type)return!1;const r=e.markerPlacement;return"CIMMarkerPlacementInsidePolygon"!==r?.type&&!("CIMMarkerPlacementPolygonCenter"===r?.type&&r.clipAtBoundary)})??!1}function b(e){if(!e)return null;const{data:r,width:t,height:a,sdfPaddingRatio:n,sdfDecodeCoeff:s}=M(e);return r?{size:[t,a],image:new Uint32Array(r.buffer),sdf:!0,simplePattern:!0,sdfPaddingRatio:n,sdfDecodeCoeff:s,anchorX:0,anchorY:0}:null}export{I as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{isRGB as e}from"../../core/colorUtils.js";import{getFontFamily as t}from"../../core/fontUtils.js";import"../../core/has.js";import{clone as r}from"../../core/lang.js";import i from"../../core/Logger.js";import{pt2px as o,px2pt as a}from"../../core/screenUtils.js";import{numericHash as s}from"../../core/string.js";import{checkForAnimations as l,globalRotation as n,getAnimationParams as m,handleAbsoluteAnchor as p,handleMarker as c,handleRelativeAnchor as f,getFrameTranslation as y,translate as d,getStaticParam as h,shouldUseAnimatedPath as u}from"./animationUtils.js";import{CIMSymbolInflatedSizeHelper as v,CIMSymbolHelper as O,forEachSymbolLayer as g}from"./CIMSymbolHelper.js";import{antialiasingOutlineFillSettings as S}from"./constants.js";import{defaultCIMValues as _}from"./defaultCIMValues.js";import{fitVectorMarker as M}from"./fitVectorMarker.js";import{OverrideHelper as C}from"./OverrideHelper.js";import{hasRichTextFormattingTags as k}from"./richTextUtils.js";import{getSDFInfo as b,getExtent as x,getSDFMetrics as P,getSDFDimensions as z}from"./SDFHelper.js";import{CIMSymbolUnits as I}from"./types.js";import{colorToArray as E,normalizeAlpha as L,getSize as V,isCIMMarkerStrokePlacement as N,hasStrokeLayer as R,getNumericValue as w,getMaxStrokeWidth as T,getTintColor as G,normalizePrimitiveOverrideProps as A,getDefaultCIMValue as F,getEnum as X,getFillColor as Y,getStrokeColor as j,fromCIMFontDecoration as W,fromCIMFontStyle as D,getStrokeWidth as H,fromCIMVerticalAlignment as U,fromCIMHorizontalAlignment as J,getTextCasing as B,isValidCIMValue as q,uncapitalize as K}from"./utils.js";import{EffectHelper as Q}from"./effects/EffectHelper.js";import{rasterizedVectorMarkerMinSize as Z,randomInsidePolygonTextureSize as $}from"../../views/2d/engine/webgl/definitions.js";const ee=()=>i.getLogger("esri.symbols.cim.cimAnalyzer");function te(e){const t=e.markerPlacement;return t&&t.angleToLine?1:0}class re{constructor(e){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[],this._hasTextStringTemplates=!1,e&&(this._resourceManager=e)}analyzeSymbolReference(t,r,i){if(this._cimLayers=i??[],!t)return this._cimLayers;if(this._reset(),this._hasTextStringTemplates=t.hasTextStringTemplates??!1,t.primitiveOverrides){this._primitiveOverrides=t.primitiveOverrides;for(const t of this._primitiveOverrides){const r=t.valueExpressionInfo;if(r)this._setPoMap(t.primitiveName,t.propertyName,r);else if(null!=t.value){let r=t.value;t.propertyName.includes("Color")&&(e(r)&&(r=E(r)),r=L(r)),this._setPoMap(t.primitiveName,t.propertyName,r)}}}return this._analyzeSymbol(t.symbol,r),this._cimLayers}_reset(){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[]}_analyzeSymbol(e,t){switch(e?.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":this._analyzeMultiLayerSymbol(e,t)}}_analyzeMultiLayerSymbol(e,t){const r=e?.symbolLayers;if(!r)return;for(let l=0;l<r.length;l++){const e=r[l];"CIMVectorMarker"===e.type&&(r[l]=M(e))}const i=e.effects;let o=0;const a=V(e)??0;"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(o=1);const s=l(e);let p={transform:[0,0,0,1],fromColor:[1,1,1,1],toColor:[1,1,1,1],colorMix:[0,0,0,0],toOpacity:[1,1,1,1],opacityMix:[0,0,0,0],shift:[1,1,1,1],hasAnimations:s,hasShiftAnimation:!1,hasMotionAnimations:!1};p=n(p),p=m(this._poMap,e,p);const c="CIMPolygonSymbol"===e.type;if("CIMPointSymbol"===e.type&&this._analyzePointSymbolHalo(e,o,a,i,s),ye(r,i))return this._analyzeCompositeOutlineFill(r,i,a);let f=r.length;for(;f--;){const s=r[f];if(!s||!1===s.enable)continue;let l;i?.length&&(l=[...i]);const n=s.effects;n?.length&&(i?l.push(...n):l=[...n]);let m=null;if(l){m=[];for(const e of l){const t=C.findEffectOverrides(e,this._primitiveOverrides);t&&m.push(t)}}const y=[];C.findApplicableOverrides(s,this._primitiveOverrides,y);const d=this._cimLayers.length;switch(s.type){case"CIMSolidFill":this._analyzeSolidFill(s,m,p,R(r));break;case"CIMPictureFill":this._analyzePictureFill(s,m,p);break;case"CIMHatchFill":this._analyzeHatchFill(s,m,p);break;case"CIMGradientFill":this._analyzeGradientFill(s,m);break;case"CIMSolidStroke":this._analyzeSolidStroke(s,m,c,a,p);break;case"CIMPictureStroke":this._analyzePictureStroke(s,m,c,a,p);break;case"CIMGradientStroke":this._analyzeGradientStroke(s,m,c,a);break;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":{"CIMLineSymbol"!==e.type&&"CIMPolygonSymbol"!==e.type||(o=te(s));const r=[],i=s.primitiveName;i&&r.push(i);const l=c&&N(s.markerPlacement);this._analyzeMarker(s,m,null,r,o,a,t,[],p,!1,l);break}default:ee().error("Cannot analyze CIM layer",s.type)}if(m?.some(({effect:e})=>me(e)))for(let e=d;e<this._cimLayers.length;e++)this._cimLayers[e].effectsChangeGeometryType=!0}}_analyzePointSymbolHalo(e,t,i,o,s){const{haloSymbol:l}=e,n=w(e.haloSize,0);if(n<=0||!l?.symbolLayers)return;const m=l.symbolLayers.filter(e=>!1!==e.enable),p=m[0];if(!p)return;const c=1===m.length&&"CIMSolidFill"===p.type;if(s)return void ee().warnOnce("CIM point symbol halos are not supported with symbol animations");const f=o?.map(e=>C.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e);if(f?.some(({effect:e})=>me(e))){if(!c)return void ee().warnOnce("Complex CIM point symbol halos are not supported with geometry-changing effects");const t=e.symbolLayers?.filter(e=>!1!==e.enable)??[];if(!ce(t,f))return void ee().warnOnce("CIM point symbol halos with geometry-changing effects currently require polygon-producing effects and solid fill or stroke layers");const r=T(t),o=this._getValueOrOverrideExpression(p.type,p.primitiveName,"Color",L(p.color));return void this._cimLayers.push({type:"outlineFill",name:p.name,colorLocked:!0,color:o,effects:f,effectsChangeGeometryType:!0,outlineColorLocked:!0,outlineColor:o,outlineWidth:2*n+r,cap:"Round",join:"Round",referenceWidth:i,pixelBufferSize:2*n+r,outlineEffects:f})}const y=e.symbolLayers?.filter(e=>!1!==e.enable)??[],d=1===y.length&&"CIMVectorMarker"===y[0].type?y[0]:null,h=new Set(d?this._primitiveOverrides.filter(e=>e.primitiveName===d.primitiveName&&["Rotation","OffsetX","OffsetY"].includes(e.propertyName)).map(e=>e.propertyName):[]),u=h.size>0?d:null,g=r(e);if(g.effects=void 0,g.angle=0,g.scaleX=1,u){const e=g.symbolLayers?.find(e=>"CIMVectorMarker"===e.type&&!1!==e.enable);e&&(h.has("Rotation")&&(e.rotation=0),h.has("OffsetX")&&(e.offsetX=0),h.has("OffsetY")&&(e.offsetY=0))}const S={...g,haloSize:0,haloSymbol:void 0},_=v.getPointSymbolHaloPadding(e,this._resourceManager),[M,k,x]=O.getTextureAnchor(S,this._resourceManager,Z,_),P=a(x),z=[];C.findApplicableOverrides(g,this._primitiveOverrides,z);const I=u?z.filter(e=>e.primitiveName!==u.primitiveName||!["Rotation","OffsetX","OffsetY"].includes(e.propertyName)):z,E=u?[{offsetX:this._getValueOrOverrideExpression(u.type,u.primitiveName,"OffsetX",h.has("OffsetX")?w(u.offsetX):0),offsetY:this._getValueOrOverrideExpression(u.type,u.primitiveName,"OffsetY",h.has("OffsetY")?w(u.offsetY):0),rotation:this._getValueOrOverrideExpression(u.type,u.primitiveName,"Rotation",h.has("Rotation")?w(u.rotation):0),size:P,frameHeight:P,rotateClockWise:!!u.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:!1}]:[];this._cimLayers.push({type:"marker",spriteRasterizationParam:{type:"sprite-rasterization-param",resource:{type:"cim-point-symbol-halo",symbol:g,sdf:c&&null!=b(S)},overrides:I},colorLocked:!0,color:c?this._getValueOrOverrideExpression(p.type,p.primitiveName,"Color",L(p.color)):[255,255,255,1],effects:f??null,effectsChangeGeometryType:f?.some(({effect:e})=>me(e)),scaleSymbolsProportionally:!1,alignment:t,anchorPoint:{x:M,y:k},isAbsoluteAnchorPoint:!1,size:P,scaleX:w(e.scaleX,1),rotation:w(e.angle,0),offsetX:0,offsetY:0,outlineColor:[0,0,0,0],outlineWidth:0,transform:{type:"cim-marker-transform-param",params:E},frameHeight:P,widthRatio:1,rotateClockwise:!0,referenceSize:i||P,sizeRatio:1,markerPlacement:null,isOutline:!1})}_analyzeSolidFill(e,t,r,i){const{primitiveName:o,type:a}=e,s=L(e.color),l=m(this._poMap,e,r);if(!i&&t?.some(e=>"CIMGeometricEffectTaperedPolygon"===e.effect.type)){const r=this._getValueOrOverrideExpression(a,o,"Color",s);return void this._cimLayers.push({type:"outlineFill",name:e.name,colorLocked:!!e.colorLocked,color:r,effects:t,outlineColor:r,outlineColorLocked:!!e.colorLocked,...S,outlineEffects:t})}this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:null,colorLocked:!!e.colorLocked,color:this._getValueOrOverrideExpression(a,o,"Color",s),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t,applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!1,animationParams:he(l)})}_analyzePictureFill(e,t,r){const{primitiveName:i,type:o}=e,a=G(e),s=w(e.height,_.CIMPictureFill.height);let l=w(e.scaleX,1);if("width"in e&&"number"==typeof e.width){const t=e.width;let r=1;const i=this._resourceManager.getResource(e.url);null!=i&&(r=i.width/i.height),l/=r*(s/t)}const n={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(i,o)},p=m(this._poMap,e,r);this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:n,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(o,i,"TintColor",a),height:this._getValueOrOverrideExpression(o,i,"Height",s),scaleX:this._getValueOrOverrideExpression(o,i,"ScaleX",l),angle:this._getValueOrOverrideExpression(o,i,"Rotation",w(e.rotation)),offsetX:this._getValueOrOverrideExpression(o,i,"OffsetX",w(e.offsetX)),offsetY:this._getValueOrOverrideExpression(o,i,"OffsetY",w(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1,animationParams:he(p)})}_analyzeHatchFill(e,t,r){const{primitiveName:i,type:o}=e,a=m(this._poMap,e,r),s=this._analyzeMaterialOverrides(i,["Rotation","OffsetX","OffsetY"]),l=A(s);let n=[255,255,255,1],p=!1;if(e.lineSymbol?.symbolLayers)for(const m of e.lineSymbol.symbolLayers){if("CIMSolidStroke"!==m.type)continue;const e=m.primitiveName??i;p||!e||m.colorLocked||null==this._poMap[e]?.Color&&null==this._poMap[e]?.StrokeColor||(n=L(m.color),n=this._maybeGetValueOrOverrideExpression(e,"StrokeColor")??this._getValueOrOverrideExpression(o,e,"Color",n),p=!0);const t=this._maybeGetValueOrOverrideExpression(e,"StrokeWidth");if(t){let r=null,i=null;"number"==typeof t?r=t:i=t.valueExpressionInfo;let a=l.find(e=>"strokeWidth"===e.propertyName);a?a.propertyName="width":(a={type:"CIMPrimitiveOverride",primitiveName:e,propertyName:"width",valueExpressionInfo:i,value:r,defaultValue:F(o,"width")},l.push(a))}}const c={type:"sprite-rasterization-param",resource:e,overrides:l};this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:c,colorLocked:!!e.colorLocked,effects:t,color:n,height:this._getValueOrOverrideExpression(o,i,"Separation",w(e.separation,_.CIMHatchFill.separation)),scaleX:1,angle:this._getValueOrOverrideExpression(o,i,"Rotation",w(e.rotation)),offsetX:this._getValueOrOverrideExpression(o,i,"OffsetX",w(e.offsetX)),offsetY:this._getValueOrOverrideExpression(o,i,"OffsetY",w(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!p,animationParams:he(a)})}_analyzeGradientFill(e,t){const{angle:r,gradientMethod:i,gradientSize:o,gradientSizeUnits:a,gradientType:s,interval:l,primitiveName:n,type:m}=e,p=_.CIMGradientFill,c=e.colorRamp;this._cimLayers.push({type:"gradientFill",name:e.name,spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(n,m)},colorLocked:!1,effects:t,color:[255,255,255,1],gradientMethod:this._getValueOrOverrideExpression(m,n,"GradientMethod",i??"Linear"),angle:this._getValueOrOverrideExpression(m,n,"Angle",w(r,p.angle)),gradientType:this._getValueOrOverrideExpression(m,n,"GradientType",s??p.gradientType),interval:this._getValueOrOverrideExpression(m,n,"Interval",w(l,"CIMFixedColorRamp"===c.type?c.colors.length:p.interval)),gradientSize:this._getValueOrOverrideExpression(m,n,"GradientSize",w(o,p.gradientSize)),gradientSizeUnits:"Absolute"===a?I.Absolute:"Relative"===a?I.Relative:p.gradientSizeUnits})}_analyzeCompositeOutlineFill(e,t,r){const i=e.find(e=>"CIMSolidFill"===e.type),o=e.find(e=>"CIMSolidStroke"===e.type);if(null==i||null==o)return;const a=[...t??[],...i.effects??[]].map(e=>C.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e),s=[...t??[],...o.effects??[]].map(e=>C.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e),l=w(o.width,_.CIMSolidStroke.width),n=X(o.capStyle,_.CIMSolidStroke.capstyle),m=X(o.joinStyle,_.CIMSolidStroke.joinstyle),p=o.miterLimit;this._cimLayers.push({type:"outlineFill",name:i.name,colorLocked:!!i.colorLocked,color:this._getValueOrOverrideExpression(i.type,i.primitiveName,"Color",L(i.color)),effects:a,effectsChangeGeometryType:a.some(({effect:e})=>me(e))||s.some(({effect:e})=>me(e)),outlineColorLocked:!!o.colorLocked,outlineColor:this._getValueOrOverrideExpression(o.type,o.primitiveName,"Color",L(o.color)),outlineWidth:this._getValueOrOverrideExpression(o.type,o.primitiveName,"Width",l),cap:this._getValueOrOverrideExpression(o.type,o.primitiveName,"CapStyle",n),join:this._getValueOrOverrideExpression(o.type,o.primitiveName,"JoinStyle",m),miterLimit:p&&this._getValueOrOverrideExpression(o.type,o.primitiveName,"MiterLimit",p),referenceWidth:r,outlineEffects:s})}_analyzeSolidStroke(e,t,r,i,o){const{primitiveName:a,type:s}=e,l=L(e.color),n=w(e.width,_.CIMSolidStroke.width),p=X(e.capStyle,_.CIMSolidStroke.capstyle),c=X(e.joinStyle,_.CIMSolidStroke.joinstyle),f=e.miterLimit;let y,d,h,u,v=[];if(this._analyzePrimitiveOverrides(a,t,null,null)&&(v=this._getPrimitiveMaterialOverrides(a,s)),t&&Array.isArray(t)&&t.length>0){const e=t[t.length-1].effect;e&&"CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&(y=e.dashTemplate,d=e.scaleDash,h=e.offsetAlongLine,u=e.primitiveName,(t=[...t]).pop())}null!=u&&v.push(...this._getPrimitiveMaterialOverrides(u,s).filter(e=>"dashTemplate"===e.propertyName));const O=void 0!==y?{type:"sprite-rasterization-param",resource:{type:"dash",dashTemplate:y,primitiveName:u},overrides:v}:null,g=m(this._poMap,e,o);this._cimLayers.push({type:"line",name:e.name,spriteRasterizationParam:O,isOutline:r,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(s,a,"Color",l),width:this._getValueOrOverrideExpression(s,a,"Width",n),cap:this._getValueOrOverrideExpression(s,a,"CapStyle",p),join:this._getValueOrOverrideExpression(s,a,"JoinStyle",c),miterLimit:f&&this._getValueOrOverrideExpression(s,a,"MiterLimit",f),referenceWidth:i,zOrder:oe(e.name),dashTemplate:this._maybeGetValueOrOverrideExpression(u,"DashTemplate")??y,offsetAlongLine:this._getValueOrOverrideExpression(s,u,"OffsetAlongLine",h??0),scaleDash:d,sampleAlphaOnly:!0,animationParams:he(g)})}_analyzePictureStroke(e,t,r,i,o){const{primitiveName:a,type:s}=e,l=G(e),n=w(e.width,_.CIMPictureStroke.width),p=X(e.capStyle,_.CIMPictureStroke.capstyle),c=X(e.joinStyle,_.CIMPictureStroke.joinstyle),f=e.miterLimit,y={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(a,s)},d=m(this._poMap,e,o);this._cimLayers.push({type:"line",name:e.name,spriteRasterizationParam:y,isOutline:r,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(s,a,"TintColor",l),width:this._getValueOrOverrideExpression(s,a,"Width",n),cap:this._getValueOrOverrideExpression(s,a,"CapStyle",p),join:this._getValueOrOverrideExpression(s,a,"JoinStyle",c),miterLimit:f&&this._getValueOrOverrideExpression(s,a,"MiterLimit",f),referenceWidth:i,zOrder:oe(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1,animationParams:he(d)})}_analyzeGradientStroke(e,t,r,i){const{gradientMethod:o,gradientSize:a,gradientSizeUnits:s,gradientType:l,interval:n,primitiveName:m,type:p}=e,c=_.CIMGradientStroke,f=w(e.width,c.width),y=X(e.capStyle,c.capstyle),d=X(e.joinStyle,c.joinstyle),h=e.miterLimit,u=e.colorRamp;this._cimLayers.push({type:"gradientStroke",name:e.name,spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(m,p)},colorLocked:!!e.colorLocked,effects:t,color:[255,255,255,1],width:this._getValueOrOverrideExpression(p,m,"Width",f),cap:this._getValueOrOverrideExpression(p,m,"CapStyle",y),join:this._getValueOrOverrideExpression(p,m,"JoinStyle",d),miterLimit:h&&this._getValueOrOverrideExpression(p,m,"MiterLimit",h),referenceWidth:i,isOutline:r,gradientMethod:this._getValueOrOverrideExpression(p,m,"GradientMethod",o??c.gradientMethod),gradientType:this._getValueOrOverrideExpression(p,m,"GradientType",l??c.gradientType),interval:this._getValueOrOverrideExpression(p,m,"Interval",w(n,"CIMFixedColorRamp"===u.type?u.colors.length:c.interval)),gradientSize:this._getValueOrOverrideExpression(p,m,"GradientSize",w(a,c.gradientSize)),gradientSizeUnits:"Absolute"===s?I.Absolute:"Relative"===s?I.Relative:c.gradientSizeUnits})}_analyzeMarker(e,t,r,i,o,a,s,l,n,y=!1,d=!1){y||=!!e.colorLocked;let h=n;if(h=p(e,h),h=c(this._poMap,e,h),h=f(e,h),h=m(this._poMap,e,h),this._analyzeMarkerInsidePolygon(e,t,y,h))return;const u=w(e.size,_.CIMVectorMarker.size),v=w(e.rotation),O=w(e.offsetX),g=w(e.offsetY),{primitiveName:S,type:M}=e,C=this._getValueOrOverrideExpression(M,S,"Size",u),k=this._getValueOrOverrideExpression(M,S,"Rotation",v),b=this._getValueOrOverrideExpression(M,S,"OffsetX",O),x=this._getValueOrOverrideExpression(M,S,"OffsetY",g);switch(e.type){case"CIMPictureMarker":this._analyzePictureMarker(e,t,r,i,o,a,C,k,b,x,l,h,y,d);break;case"CIMVectorMarker":this._analyzeVectorMarker(e,t,r,i,o,a,C,k,b,x,l,h,s,y,d)}}_analyzeMarkerInsidePolygon(e,t,r,i){const{markerPlacement:o,type:s}=e;if(!o||"CIMMarkerPlacementInsidePolygon"!==o.type||i.hasMotionAnimations)return!1;if("CIMVectorMarker"===s||"CIMPictureMarker"===s){const r=e.primitiveName;if(r&&this._analyzePrimitiveOverrides([r],t,null,null))return!1;const i=o.primitiveName;if(i&&this._analyzePrimitiveOverrides([i],t,null,null))return!1;if("CIMVectorMarker"===s){const{markerGraphics:t}=e;if(t)for(const e of t){const{symbol:t}=e;if("CIMPolygonSymbol"===t?.type&&t.symbolLayers){const{symbolLayers:e}=t;for(const t of e)if("CIMSolidStroke"===t.type)return!1}}}else{const{animatedSymbolProperties:t}=e;if(t)return!1}}const l=Math.abs(o.stepX),n=Math.abs(o.stepY);if(0===l||0===n)return!0;let m,p;if("Random"===o.gridType){const e=a($),t=Math.max(Math.floor(e/l),1);m=n*Math.max(Math.floor(e/n),1);p=t*l/m}else o.shiftOddRows?(m=2*n,p=l/n*.5):(m=n,p=l/n);const c=G(e),f="CIMCharacterMarker"===e.type?null:{type:"sprite-rasterization-param",resource:{...e,effects:e.effects?.filter(e=>!ne(e))},overrides:[]};return this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:f,colorLocked:r,effects:t,color:c,height:m,scaleX:p,angle:o.gridAngle??0,offsetX:w(o.offsetX),offsetY:w(o.offsetY),applyRandomOffset:"Random"===o.gridType,sampleAlphaOnly:"CIMPictureMarker"!==e.type,hasUnresolvedReplacementColor:!0,animationParams:he(i)}),!0}_analyzePictureMarker(e,t,i,o,a,l,n,m,p,c,f,y,d,h){const{animatedSymbolProperties:u,primitiveName:v,type:O}=e;let g=w(e.scaleX,1);const S=G(e);i||(i=this._createMarkerPlacementOverrideExpression(e.markerPlacement));const _=this._createGIFAnimatedSymbolPropertiesOverrideExpression(u),M=e.anchorPoint??{x:0,y:0};if("width"in e&&"number"==typeof e.width){const t=e.width;let r=1;const i=this._resourceManager.getResource(e.url);null!=i&&(r=i.width/i.height);g/=r*(w(e.size)/t)}const C=[...o];let k;e.primitiveName&&C.push(e.primitiveName),u||_?k={type:"animated",url:e.url,urlHash:"H"+s(e.url),playAnimation:e.animatedSymbolProperties?.playAnimation,reverseAnimation:e.animatedSymbolProperties?.reverseAnimation,randomizeStartTime:e.animatedSymbolProperties?.randomizeStartTime,randomizeStartSeed:e.animatedSymbolProperties?.randomizeStartSeed,startTimeOffset:e.animatedSymbolProperties?.startTimeOffset,duration:e.animatedSymbolProperties?.duration,repeatType:e.animatedSymbolProperties?.repeatType,repeatDelay:e.animatedSymbolProperties?.repeatDelay}:(k=r(e),k.markerPlacement=null);const b={type:"sprite-rasterization-param",resource:k,overrides:this._getMaterialOverrides(C,O)};_&&b.overrides.push(..._.overrides);const x=n;this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:b,colorLocked:d,effects:t,scaleSymbolsProportionally:!1,alignment:a,size:n,scaleX:this._getValueOrOverrideExpression(O,v,"ScaleX",g),rotation:m,offsetX:p,offsetY:c,transform:{type:"cim-marker-transform-param",params:f},color:this._getValueOrOverrideExpression(O,v,"TintColor",S),anchorPoint:{x:M.x,y:M.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:[0,0,0,0],outlineWidth:0,frameHeight:0,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:1,isOutline:h,markerPlacement:i,animationParams:he(y),baseSize:x})}_analyzeVectorMarker(e,t,r,i,o,a,s,l,n,m,p,c,f,u,v){const O=e.markerGraphics;if(!O)return;const g=e.frame;let S=0;S=g?g.ymax-g.ymin:a;const _=!!e.scaleSymbolsProportionally;if(S){const t={offsetX:n,offsetY:m,rotation:l,size:s,frameHeight:S,rotateClockWise:!!e.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:_};p=[...p,t]}r||(r=this._createMarkerPlacementOverrideExpression(e.markerPlacement));for(const M of O)if(M){const s=M.symbol;if(!s)continue;const l=M.primitiveName;l&&i.push(l);let n,m=c;if(("CIMPointSymbol"===s.type||"CIMTextSymbol"===s.type)&&g){let t=0,r=0;const i=M.geometry;"x"in i&&"y"in i&&(t+=i.x-.5*(g.xmin+g.xmax),r+=i.y-.5*(g.ymin+g.ymax));const o=e.anchorPoint;let a=!1;o&&("Absolute"===e.anchorPointUnits?(t-=o.x,r-=o.y,a=!0):g&&(t-=(g.xmax-g.xmin)*o.x,r-=(g.ymax-g.ymin)*o.y));const s={offsetX:t,offsetY:r,rotation:0,size:0,frameHeight:0,rotateClockWise:!1,absoluteAnchorPoint:a,scaleSymbolsProportionally:_};n=[...p,s]}const O=M.geometry,[C,k]=y(O,g);switch(0===C&&0===k||(m=d(m,C,k)),s.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":f||le(s)?(m={...m,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!0,selectGlobalRotation:!1,translation:h([0,0]),rotation:h(0),scale:h(S),parent:c.transform}},this._analyzeMultiLayerGraphicNonSDF(e,t,r,M,i,o,a,n??p,m,S,u,v)):this._analyzeMultiLayerGraphic(e,t,r,M,i,o,a,n??p,m,S,u,v);break;case"CIMTextSymbol":this._analyzeTextGraphic(t,r,M,i,o,a,n??p,u)}l&&i.pop()}}_analyzeMultiLayerGraphic(e,t,r,i,o,a,s,l,n,m,p,c){const f=i.symbol,y=f.symbolLayers;if(y){if(!se(y)||u(n))return fe(y)?(g(f,e=>{e.colorLocked&&(p=!0)}),void this._analyzeMultiLayerGraphicNonSDF(e,t,r,i,o,a,s,l,n,m,p,c)):void this._analyzeMarkerGraphicSymbolLayers(e,t,r,i,o,a,s,l,n,m,p,c);this._analyzeCompositeMarkerGraphic(e,t,r,i,y,a,s,l,m,p,c)}}_analyzeMarkerGraphicSymbolLayers(e,t,r,i,o,a,s,l,n,p,c,f){const y=i.symbol,d=y.symbolLayers;if(!d)return;const h=Q.applyEffects(y.effects,i.geometry);if(!h)return;let u=d.length;for(;u--;){const y=d[u];if(!y||!1===y.enable)continue;const v=y.primitiveName;switch(v&&o.push(v),y.type){case"CIMSolidFill":case"CIMSolidStroke":{const o=Q.applyEffects(y.effects,h),d=x(o);if(!d)continue;const u="Relative"!==e.anchorPointUnits,O="CIMSolidStroke"===y.type?y.width:0,{frameSizeRatio:g,anchorX:S,anchorY:M,widthRatio:C,sdfPaddingRatio:k,sdfTextureSize:b}=P(d,e.frame,e.size,e.anchorPoint,u,O,e.scaleSymbolsProportionally),I="CIMSolidFill"===y.type,E={type:"sdf",geometry:o,sdfPaddingRatio:k,asFill:I,sdfTextureSize:b},{path:V}=y,N=I?L(Y(y)):null==V?L(j(y)):[0,0,0,0],R=I?[0,0,0,0]:L(j(y));if(!I&&!O)break;const T=i.primitiveName;let G=null;I&&!y.colorLocked&&(G=this._maybeGetValueOrOverrideExpression(T,"FillColor"));let A=null;I||y.colorLocked||(A=this._maybeGetValueOrOverrideExpression(T,"StrokeColor"));const F=G??this._getValueOrOverrideExpression(y.type,v,"Color",N),X=A??this._getValueOrOverrideExpression(y.type,v,"Color",R),W=this._maybeGetValueOrOverrideExpression(T,"StrokeWidth")??this._getValueOrOverrideExpression(y.type,v,"Width",O),D=V?{type:"sprite-rasterization-param",resource:{type:"path",path:V,asFill:I},overrides:[]}:{type:"sprite-rasterization-param",resource:E,overrides:[]},H=m(this._poMap,y,n),U=w(e.size,_.CIMVectorMarker.size),J=this._getValueOrOverrideExpression(e.type,e.primitiveName,"Size",U);this._cimLayers.push({type:"marker",name:y.name,groupName:e.name,spriteRasterizationParam:D,colorLocked:!!y.colorLocked||!!c,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:S,y:M},isAbsoluteAnchorPoint:u,size:p,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:p,widthRatio:C,rotateClockwise:!1,referenceSize:s,sizeRatio:g,color:F,outlineColor:X,outlineWidth:W,isOutline:f,markerPlacement:r,animationParams:he(H),isStroke:"CIMSolidFill"!==y.type,baseSize:J,...z(o,b,k)});break}case"CIMPictureMarker":case"CIMVectorMarker":if(y.markerPlacement){ee().error("Error analyzing CIM, got unexpected marker placement");break}this._analyzeMarker(y,t,r,o,a,s,!1,l,n,c,f)}v&&o.pop()}}_analyzeTextGraphic(e,r,i,o,a,s,l,n){const m=[];C.findApplicableOverrides(i,this._primitiveOverrides,m);const p=i.geometry;if(!("x"in p)||!("y"in p))return;const c=i.symbol,f=W(c),y=D(c.fontStyleName),d=t(c.fontFamilyName);c.font={family:d,decoration:f,...y};const h=w(c.height,_.CIMTextSymbol.height),u=w(c.angle),v=w(c.offsetX),O=w(c.offsetY),{haloSymbol:g}=c,S=w(c.haloSize,0);let M=[0,0,0,0];if(g?.symbolLayers?.length){const e=g.symbolLayers;for(const t of e)if(t.color){M=this._getValueOrOverrideExpression(c?.haloSymbol?.type??"CIMPolygonSymbol",t.primitiveName,"Color",L(t.color));break}}const b=i.primitiveName;let x=[0,0,0,1],P=[0,0,0,0],z=0,I=!1;if(c.symbol?.symbolLayers)for(const t of c.symbol.symbolLayers){const e=t.primitiveName;if("CIMSolidStroke"===t.type)P=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Color",L(t.color)),z=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Width",H(t)??0);else if("CIMSolidFill"===t.type){const r=L(t.color);I=I??!!t.colorLocked,x=this._getValueOrOverrideExpression("CIMSolidFill",e??b,"Color",r)}}let E=null,V=null,N=null,R=null,T=null;b&&(E=this._maybeGetValueOrOverrideExpression(b,"TextSize"),V=this._maybeGetValueOrOverrideExpression(b,"TextAngle"),N=this._maybeGetValueOrOverrideExpression(b,"TextOffsetX"),R=this._maybeGetValueOrOverrideExpression(b,"TextOffsetY"),I||(T=this._maybeGetValueOrOverrideExpression(b,"FillColor")));const G=T??x;let A=null,F=null,X=0;if("CIMBackgroundCallout"===c.callout?.type){const e=c.callout;if(e.backgroundSymbol){const t=e.backgroundSymbol.symbolLayers;if(t)for(const e of t)"CIMSolidFill"===e.type?A=L(e.color):"CIMSolidStroke"===e.type&&(F=L(e.color),X=w(e.width,_.CIMSolidStroke.width))}}const Y=this._getValueOrOverrideExpression(c.type,i.primitiveName,"TextString",i.textString??"");if(null==Y)return;const{fontStyleName:j}=c,B=d+(j?"-"+j.toLowerCase():"-regular"),q=this._getMaterialOverrides(o,c.type);q.push(...this._getPrimitiveMaterialOverrides(i.primitiveName,c.type)),this._collectDictionaryTemplateOverrides(q,i);const K={type:"text-rasterization-param",resource:{type:"text",textString:i.textString??"",font:c.font,symbol:c,primitiveName:i.primitiveName,supportsRichText:k(i.textString??"")||q.some(e=>"textString"===e.propertyName)},overrides:q};this._cimLayers.push({type:"text",lineWidth:c.lineWidth,textRasterizationParam:K,colorLocked:!!n||!!I,effects:e,alignment:a,anchorPoint:{x:0,y:0},isAbsoluteAnchorPoint:!1,fontName:B,decoration:f,haloSize:S,haloColor:M,weight:y.weight,style:y.style,size:E??h,angle:V??u,offsetX:N??v,offsetY:R??O,transform:{type:"cim-marker-transform-param",params:l},horizontalAlignment:J(c.horizontalAlignment),verticalAlignment:U(c.verticalAlignment),text:Y,color:G,outlineColor:P,outlineSize:z,backgroundColor:A,borderLineColor:F,borderLineWidth:X,referenceSize:s,sizeRatio:1,markerPlacement:r})}_collectDictionaryTemplateOverrides(e,t){if(t.textString&&this._hasTextStringTemplates){const r=B(t.symbol);e.push({propertyName:"textString",defaultValue:"",valueExpressionInfo:{type:"dictionary-template",textCase:r,template:t.textString},primitiveName:t.primitiveName})}}_analyzeMultiLayerGraphicNonSDF(e,t,r,i,a,s,l,n,m,p,c,f){const y=ie(e,i),d=e.primitiveName,h=this._analyzeMaterialOverrides(d,["Rotation","OffsetX","OffsetY"]),u=A(h),[v,g,S]=O.getTextureAnchor(y,this._resourceManager,Z),M=this._getMaterialOverrides(a,e.type).filter(e=>e.primitiveName!==d||!["rotation","offsetX","offsetY"].includes(e.propertyName));M.push(...u);const C={type:"sprite-rasterization-param",resource:{...y,avoidSDFRasterization:!0},overrides:M},k=w(e.size,_.CIMVectorMarker.size),b=this._getValueOrOverrideExpression(e.type,d,"Size",k);this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:C,colorLocked:c,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:s,anchorPoint:{x:v,y:g},isAbsoluteAnchorPoint:!1,size:p,rotation:0,offsetX:0,offsetY:0,transform:{type:"cim-marker-transform-param",params:n},color:[255,255,255,1],outlineColor:[0,0,0,0],outlineWidth:0,scaleX:1,frameHeight:p,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:S/o(e.size),isOutline:f,markerPlacement:r,animationParams:he(m),baseSize:b})}_createMarkerPlacementOverrideExpression(e){if(!e)return null;const t=[];return C.findApplicableOverrides(e,this._primitiveOverrides,t),{type:"cim-marker-placement-param",placement:e,overrides:de(t)}}_createGIFAnimatedSymbolPropertiesOverrideExpression(e){if(!e)return null;const t=[];return C.findApplicableOverrides(e,this._primitiveOverrides,t),{type:"cim-gif-animation-params",animation:e,overrides:de(t)}}_analyzeCompositeMarkerGraphic(e,t,r,i,o,a,s,l,n,m,p){const c=i.geometry,f=o[0],y=o[1],d=x(c);if(!d)return;const h="Relative"!==e.anchorPointUnits,u=w(f.width,_.CIMSolidStroke.width),{frameSizeRatio:v,anchorX:O,anchorY:g,widthRatio:S,sdfPaddingRatio:M,sdfTextureSize:C}=P(d,e.frame,e.size,e.anchorPoint,h,u,e.scaleSymbolsProportionally),{path:k}=y,b=y.primitiveName,z=f.primitiveName,I=i.primitiveName;let E=null;y.colorLocked||m||(E=this._maybeGetValueOrOverrideExpression(I,"FillColor"));const V=E??this._getValueOrOverrideExpression(y.type,b,"Color",L(y.color));let N=null;f.colorLocked||m||(N=this._maybeGetValueOrOverrideExpression(I,"StrokeColor"));const R=N??this._getValueOrOverrideExpression(f.type,z,"Color",L(f.color)),T=this._maybeGetValueOrOverrideExpression(I,"StrokeWidth")??this._getValueOrOverrideExpression(f.type,z,"Width",u),G={type:"sprite-rasterization-param",resource:k?{type:"path",path:k,asFill:!0}:{type:"sdf",geometry:c,sdfTextureSize:C,sdfPaddingRatio:M,asFill:!0},overrides:[]};this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:G,colorLocked:m,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:O,y:g},isAbsoluteAnchorPoint:h,size:n,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:n,widthRatio:S,rotateClockwise:!1,referenceSize:s,sizeRatio:v,color:V,outlineColor:R,outlineWidth:T,isOutline:p,markerPlacement:r})}_setPoMap(e,t,r){let i;this._poMap[e]?i=this._poMap[e]:(i={},this._poMap[e]=i),i[t]=r}_maybeGetValueOrOverrideExpression(e,t,r){return this._getValueOrOverrideExpression("",e,t,r,!1)}_getValueOrOverrideExpression(e,t,r,i,o=!0){if(o&&!q(i)&&(i=F(e,r.toLowerCase())),null==t)return i;const a=this._poMap[t];if(null==a)return i;const s=a[r];return"string"==typeof s||"number"==typeof s||Array.isArray(s)?s:s?{valueExpressionInfo:s,defaultValue:i}:i}_analyzePrimitiveOverrides(e,t,r,i){if(null==e)return!1;"string"==typeof e&&(e=[e]);for(const o of this._primitiveOverrides)if(e.includes(o.primitiveName)&&o.valueExpressionInfo)return!0;if(null!=t)for(const o of t)if(o?.overrides.length>0)return!0;if(null!=r)for(const o of r)if(o?.overrides.length>0)return!0;if(null!=i)for(const o of i)if(o?.overrides.length>0)return!0;return!1}_getMaterialOverrides(e,t){if(!e)return[];const r=[];for(const i of e)r.push(...this._getPrimitiveMaterialOverrides(i,t));return r}_getPrimitiveMaterialOverrides(e,t){if(!e)return[];const r=A(this._primitiveOverrides.filter(t=>t.primitiveName===e));return r.forEach(e=>e.defaultValue=F(t,e.propertyName.toLowerCase())),r}_analyzeMaterialOverrides(e,t){return this._primitiveOverrides.filter(r=>r.primitiveName!==e||!t.includes(r.propertyName))}}function ie(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 oe(e){if(e?.startsWith("Level_")){const t=parseInt(e.slice(6),10);if(!isNaN(t))return t}return 0}function ae(e,t){if(!t||0===t.length)return e;const i=r(e);return C.applyOverrides(i,t),i}const se=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&null==e[0].path&&null==e[1].path&&!e[0].effects&&!e[1].effects&&!e[0].animations&&!e[1].animations;function le(e){const t=e.symbolLayers;if(!t)return!1;const r=t.find(e=>e.effects?.find(e=>"CIMGeometricEffectDashes"===e.type&&null!=e.dashTemplate)),i=t.find(e=>e.effects?.find(e=>"CIMGeometricEffectAddControlPoints"===e.type));return!!r||!!i}function ne(e){return me(e)}function me(e){return"CIMGeometricEffectCircularSector"===e.type||"CIMGeometricEffectRadial"===e.type||"CIMGeometricEffectTaperedPolygon"===e.type||"PrivateDimensionEffect"===e.type||"PrivateMatcherGeometryOverrideEffect"===e.type}function pe(e){return"CIMGeometricEffectCircularSector"===e.type||"CIMGeometricEffectTaperedPolygon"===e.type}function ce(e,t){const r=e.some(e=>"CIMSolidFill"===e.type),i=e.every(e=>"CIMSolidFill"===e.type||"CIMSolidStroke"===e.type);return r&&i&&t.some(({effect:e})=>pe(e))}function fe(e){return e.some(e=>"CIMSolidFill"!==e.type&&"CIMSolidStroke"!==e.type&&("CIMVectorMarker"!==e.type&&"CIMPictureMarker"!==e.type||null!=e.markerPlacement))}function ye(e,t){if((t?.some(e=>"CIMGeometricEffectRadial"===e.type)&&t?.some(e=>"CIMGeometricEffectTaperedPolygon"===e.type)||t?.some(e=>"CIMGeometricEffectCircularSector"===e.type))&&2===e.length){const t=e.find(e=>"CIMSolidFill"===e.type),r=e.find(e=>"CIMSolidStroke"===e.type),i=r?.effects?.some(e=>"CIMGeometricEffectDashes"===e.type);if(null!=t&&null!=r&&!i)return!0}return!1}function de(e){return r(e).map(e=>({...e,propertyName:K(e.propertyName)}))}function he(e){return u(e)?{type:"animation-params",params:e}:null}export{re as CIMAnalyzer,ae as analyzeCIMResource};
|
|
2
|
+
import{isRGB as e}from"../../core/colorUtils.js";import{getFontFamily as t}from"../../core/fontUtils.js";import"../../core/has.js";import{clone as r}from"../../core/lang.js";import i from"../../core/Logger.js";import{pt2px as o,px2pt as a}from"../../core/screenUtils.js";import{numericHash as s}from"../../core/string.js";import{checkForAnimations as l,globalRotation as n,getAnimationParams as m,handleAbsoluteAnchor as p,handleMarker as c,handleRelativeAnchor as f,getFrameTranslation as y,translate as d,getStaticParam as h,shouldUseAnimatedPath as u}from"./animationUtils.js";import{CIMSymbolInflatedSizeHelper as v,CIMSymbolHelper as O,forEachSymbolLayer as g}from"./CIMSymbolHelper.js";import{antialiasingOutlineFillSettings as S}from"./constants.js";import{defaultCIMValues as _}from"./defaultCIMValues.js";import{fitVectorMarker as M}from"./fitVectorMarker.js";import{fromCIMFontStyle as C}from"./fromCIMFontStyle.js";import{OverrideHelper as k}from"./OverrideHelper.js";import{hasRichTextFormattingTags as b}from"./richTextUtils.js";import{getSDFInfo as x,getExtent as P,getSDFMetrics as z,getSDFDimensions as I}from"./SDFHelper.js";import{CIMSymbolUnits as E}from"./types.js";import{colorToArray as L,normalizeAlpha as V,getSize as N,isCIMMarkerStrokePlacement as R,hasStrokeLayer as w,getNumericValue as T,getMaxStrokeWidth as G,getTintColor as A,normalizePrimitiveOverrideProps as F,getDefaultCIMValue as X,getEnum as Y,getFillColor as j,getStrokeColor as W,fromCIMFontDecoration as D,getStrokeWidth as H,fromCIMVerticalAlignment as U,fromCIMHorizontalAlignment as J,getTextCasing as B,isValidCIMValue as q,uncapitalize as K}from"./utils.js";import{EffectHelper as Q}from"./effects/EffectHelper.js";import{rasterizedVectorMarkerMinSize as Z,randomInsidePolygonTextureSize as $}from"../../views/2d/engine/webgl/definitions.js";const ee=()=>i.getLogger("esri.symbols.cim.cimAnalyzer");function te(e){const t=e.markerPlacement;return t&&t.angleToLine?1:0}class re{constructor(e){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[],this._hasTextStringTemplates=!1,e&&(this._resourceManager=e)}analyzeSymbolReference(t,r,i){if(this._cimLayers=i??[],!t)return this._cimLayers;if(this._reset(),this._hasTextStringTemplates=t.hasTextStringTemplates??!1,t.primitiveOverrides){this._primitiveOverrides=t.primitiveOverrides;for(const t of this._primitiveOverrides){const r=t.valueExpressionInfo;if(r)this._setPoMap(t.primitiveName,t.propertyName,r);else if(null!=t.value){let r=t.value;t.propertyName.includes("Color")&&(e(r)&&(r=L(r)),r=V(r)),this._setPoMap(t.primitiveName,t.propertyName,r)}}}return this._analyzeSymbol(t.symbol,r),this._cimLayers}_reset(){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[]}_analyzeSymbol(e,t){switch(e?.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":this._analyzeMultiLayerSymbol(e,t)}}_analyzeMultiLayerSymbol(e,t){const r=e?.symbolLayers;if(!r)return;for(let l=0;l<r.length;l++){const e=r[l];"CIMVectorMarker"===e.type&&(r[l]=M(e))}const i=e.effects;let o=0;const a=N(e)??0;"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(o=1);const s=l(e);let p={transform:[0,0,0,1],fromColor:[1,1,1,1],toColor:[1,1,1,1],colorMix:[0,0,0,0],toOpacity:[1,1,1,1],opacityMix:[0,0,0,0],shift:[1,1,1,1],hasAnimations:s,hasShiftAnimation:!1,hasMotionAnimations:!1};p=n(p),p=m(this._poMap,e,p);const c="CIMPolygonSymbol"===e.type;if("CIMPointSymbol"===e.type&&this._analyzePointSymbolHalo(e,o,a,i,s),ye(r,i))return this._analyzeCompositeOutlineFill(r,i,a);let f=r.length;for(;f--;){const s=r[f];if(!s||!1===s.enable)continue;let l;i?.length&&(l=[...i]);const n=s.effects;n?.length&&(i?l.push(...n):l=[...n]);let m=null;if(l){m=[];for(const e of l){const t=k.findEffectOverrides(e,this._primitiveOverrides);t&&m.push(t)}}const y=[];k.findApplicableOverrides(s,this._primitiveOverrides,y);const d=this._cimLayers.length;switch(s.type){case"CIMSolidFill":this._analyzeSolidFill(s,m,p,w(r));break;case"CIMPictureFill":this._analyzePictureFill(s,m,p);break;case"CIMHatchFill":this._analyzeHatchFill(s,m,p);break;case"CIMGradientFill":this._analyzeGradientFill(s,m);break;case"CIMSolidStroke":this._analyzeSolidStroke(s,m,c,a,p);break;case"CIMPictureStroke":this._analyzePictureStroke(s,m,c,a,p);break;case"CIMGradientStroke":this._analyzeGradientStroke(s,m,c,a);break;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":{"CIMLineSymbol"!==e.type&&"CIMPolygonSymbol"!==e.type||(o=te(s));const r=[],i=s.primitiveName;i&&r.push(i);const l=c&&R(s.markerPlacement);this._analyzeMarker(s,m,null,r,o,a,t,[],p,!1,l);break}default:ee().error("Cannot analyze CIM layer",s.type)}if(m?.some(({effect:e})=>me(e)))for(let e=d;e<this._cimLayers.length;e++)this._cimLayers[e].effectsChangeGeometryType=!0}}_analyzePointSymbolHalo(e,t,i,o,s){const{haloSymbol:l}=e,n=T(e.haloSize,0);if(n<=0||!l?.symbolLayers)return;const m=l.symbolLayers.filter(e=>!1!==e.enable),p=m[0];if(!p)return;const c=1===m.length&&"CIMSolidFill"===p.type;if(s)return void ee().warnOnce("CIM point symbol halos are not supported with symbol animations");const f=o?.map(e=>k.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e);if(f?.some(({effect:e})=>me(e))){if(!c)return void ee().warnOnce("Complex CIM point symbol halos are not supported with geometry-changing effects");const t=e.symbolLayers?.filter(e=>!1!==e.enable)??[];if(!ce(t,f))return void ee().warnOnce("CIM point symbol halos with geometry-changing effects currently require polygon-producing effects and solid fill or stroke layers");const r=G(t),o=this._getValueOrOverrideExpression(p.type,p.primitiveName,"Color",V(p.color));return void this._cimLayers.push({type:"outlineFill",name:p.name,colorLocked:!0,color:o,effects:f,effectsChangeGeometryType:!0,outlineColorLocked:!0,outlineColor:o,outlineWidth:2*n+r,cap:"Round",join:"Round",referenceWidth:i,pixelBufferSize:2*n+r,outlineEffects:f})}const y=e.symbolLayers?.filter(e=>!1!==e.enable)??[],d=1===y.length&&"CIMVectorMarker"===y[0].type?y[0]:null,h=new Set(d?this._primitiveOverrides.filter(e=>e.primitiveName===d.primitiveName&&["Rotation","OffsetX","OffsetY"].includes(e.propertyName)).map(e=>e.propertyName):[]),u=h.size>0?d:null,g=r(e);if(g.effects=void 0,g.angle=0,g.scaleX=1,u){const e=g.symbolLayers?.find(e=>"CIMVectorMarker"===e.type&&!1!==e.enable);e&&(h.has("Rotation")&&(e.rotation=0),h.has("OffsetX")&&(e.offsetX=0),h.has("OffsetY")&&(e.offsetY=0))}const S={...g,haloSize:0,haloSymbol:void 0},_=v.getPointSymbolHaloPadding(e,this._resourceManager),[M,C,b]=O.getTextureAnchor(S,this._resourceManager,Z,_),P=a(b),z=[];k.findApplicableOverrides(g,this._primitiveOverrides,z);const I=u?z.filter(e=>e.primitiveName!==u.primitiveName||!["Rotation","OffsetX","OffsetY"].includes(e.propertyName)):z,E=u?[{offsetX:this._getValueOrOverrideExpression(u.type,u.primitiveName,"OffsetX",h.has("OffsetX")?T(u.offsetX):0),offsetY:this._getValueOrOverrideExpression(u.type,u.primitiveName,"OffsetY",h.has("OffsetY")?T(u.offsetY):0),rotation:this._getValueOrOverrideExpression(u.type,u.primitiveName,"Rotation",h.has("Rotation")?T(u.rotation):0),size:P,frameHeight:P,rotateClockWise:!!u.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:!1}]:[];this._cimLayers.push({type:"marker",spriteRasterizationParam:{type:"sprite-rasterization-param",resource:{type:"cim-point-symbol-halo",symbol:g,sdf:c&&null!=x(S)},overrides:I},colorLocked:!0,color:c?this._getValueOrOverrideExpression(p.type,p.primitiveName,"Color",V(p.color)):[255,255,255,1],effects:f??null,effectsChangeGeometryType:f?.some(({effect:e})=>me(e)),scaleSymbolsProportionally:!1,alignment:t,anchorPoint:{x:M,y:C},isAbsoluteAnchorPoint:!1,size:P,scaleX:T(e.scaleX,1),rotation:T(e.angle,0),offsetX:0,offsetY:0,outlineColor:[0,0,0,0],outlineWidth:0,transform:{type:"cim-marker-transform-param",params:E},frameHeight:P,widthRatio:1,rotateClockwise:!0,referenceSize:i||P,sizeRatio:1,markerPlacement:null,isOutline:!1})}_analyzeSolidFill(e,t,r,i){const{primitiveName:o,type:a}=e,s=V(e.color),l=m(this._poMap,e,r);if(!i&&t?.some(e=>"CIMGeometricEffectTaperedPolygon"===e.effect.type)){const r=this._getValueOrOverrideExpression(a,o,"Color",s);return void this._cimLayers.push({type:"outlineFill",name:e.name,colorLocked:!!e.colorLocked,color:r,effects:t,outlineColor:r,outlineColorLocked:!!e.colorLocked,...S,outlineEffects:t})}this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:null,colorLocked:!!e.colorLocked,color:this._getValueOrOverrideExpression(a,o,"Color",s),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t,applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!1,animationParams:he(l)})}_analyzePictureFill(e,t,r){const{primitiveName:i,type:o}=e,a=A(e),s=T(e.height,_.CIMPictureFill.height);let l=T(e.scaleX,1);if("width"in e&&"number"==typeof e.width){const t=e.width;let r=1;const i=this._resourceManager.getResource(e.url);null!=i&&(r=i.width/i.height),l/=r*(s/t)}const n={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(i,o)},p=m(this._poMap,e,r);this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:n,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(o,i,"TintColor",a),height:this._getValueOrOverrideExpression(o,i,"Height",s),scaleX:this._getValueOrOverrideExpression(o,i,"ScaleX",l),angle:this._getValueOrOverrideExpression(o,i,"Rotation",T(e.rotation)),offsetX:this._getValueOrOverrideExpression(o,i,"OffsetX",T(e.offsetX)),offsetY:this._getValueOrOverrideExpression(o,i,"OffsetY",T(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1,animationParams:he(p)})}_analyzeHatchFill(e,t,r){const{primitiveName:i,type:o}=e,a=m(this._poMap,e,r),s=this._analyzeMaterialOverrides(i,["Rotation","OffsetX","OffsetY"]),l=F(s);let n=[255,255,255,1],p=!1;if(e.lineSymbol?.symbolLayers)for(const m of e.lineSymbol.symbolLayers){if("CIMSolidStroke"!==m.type)continue;const e=m.primitiveName??i;p||!e||m.colorLocked||null==this._poMap[e]?.Color&&null==this._poMap[e]?.StrokeColor||(n=V(m.color),n=this._maybeGetValueOrOverrideExpression(e,"StrokeColor")??this._getValueOrOverrideExpression(o,e,"Color",n),p=!0);const t=this._maybeGetValueOrOverrideExpression(e,"StrokeWidth");if(t){let r=null,i=null;"number"==typeof t?r=t:i=t.valueExpressionInfo;let a=l.find(e=>"strokeWidth"===e.propertyName);a?a.propertyName="width":(a={type:"CIMPrimitiveOverride",primitiveName:e,propertyName:"width",valueExpressionInfo:i,value:r,defaultValue:X(o,"width")},l.push(a))}}const c={type:"sprite-rasterization-param",resource:e,overrides:l};this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:c,colorLocked:!!e.colorLocked,effects:t,color:n,height:this._getValueOrOverrideExpression(o,i,"Separation",T(e.separation,_.CIMHatchFill.separation)),scaleX:1,angle:this._getValueOrOverrideExpression(o,i,"Rotation",T(e.rotation)),offsetX:this._getValueOrOverrideExpression(o,i,"OffsetX",T(e.offsetX)),offsetY:this._getValueOrOverrideExpression(o,i,"OffsetY",T(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!p,animationParams:he(a)})}_analyzeGradientFill(e,t){const{angle:r,gradientMethod:i,gradientSize:o,gradientSizeUnits:a,gradientType:s,interval:l,primitiveName:n,type:m}=e,p=_.CIMGradientFill,c=e.colorRamp;this._cimLayers.push({type:"gradientFill",name:e.name,spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(n,m)},colorLocked:!1,effects:t,color:[255,255,255,1],gradientMethod:this._getValueOrOverrideExpression(m,n,"GradientMethod",i??"Linear"),angle:this._getValueOrOverrideExpression(m,n,"Angle",T(r,p.angle)),gradientType:this._getValueOrOverrideExpression(m,n,"GradientType",s??p.gradientType),interval:this._getValueOrOverrideExpression(m,n,"Interval",T(l,"CIMFixedColorRamp"===c.type?c.colors.length:p.interval)),gradientSize:this._getValueOrOverrideExpression(m,n,"GradientSize",T(o,p.gradientSize)),gradientSizeUnits:"Absolute"===a?E.Absolute:"Relative"===a?E.Relative:p.gradientSizeUnits})}_analyzeCompositeOutlineFill(e,t,r){const i=e.find(e=>"CIMSolidFill"===e.type),o=e.find(e=>"CIMSolidStroke"===e.type);if(null==i||null==o)return;const a=[...t??[],...i.effects??[]].map(e=>k.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e),s=[...t??[],...o.effects??[]].map(e=>k.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e),l=T(o.width,_.CIMSolidStroke.width),n=Y(o.capStyle,_.CIMSolidStroke.capstyle),m=Y(o.joinStyle,_.CIMSolidStroke.joinstyle),p=o.miterLimit;this._cimLayers.push({type:"outlineFill",name:i.name,colorLocked:!!i.colorLocked,color:this._getValueOrOverrideExpression(i.type,i.primitiveName,"Color",V(i.color)),effects:a,effectsChangeGeometryType:a.some(({effect:e})=>me(e))||s.some(({effect:e})=>me(e)),outlineColorLocked:!!o.colorLocked,outlineColor:this._getValueOrOverrideExpression(o.type,o.primitiveName,"Color",V(o.color)),outlineWidth:this._getValueOrOverrideExpression(o.type,o.primitiveName,"Width",l),cap:this._getValueOrOverrideExpression(o.type,o.primitiveName,"CapStyle",n),join:this._getValueOrOverrideExpression(o.type,o.primitiveName,"JoinStyle",m),miterLimit:p&&this._getValueOrOverrideExpression(o.type,o.primitiveName,"MiterLimit",p),referenceWidth:r,outlineEffects:s})}_analyzeSolidStroke(e,t,r,i,o){const{primitiveName:a,type:s}=e,l=V(e.color),n=T(e.width,_.CIMSolidStroke.width),p=Y(e.capStyle,_.CIMSolidStroke.capstyle),c=Y(e.joinStyle,_.CIMSolidStroke.joinstyle),f=e.miterLimit;let y,d,h,u,v=[];if(this._analyzePrimitiveOverrides(a,t,null,null)&&(v=this._getPrimitiveMaterialOverrides(a,s)),t&&Array.isArray(t)&&t.length>0){const e=t[t.length-1].effect;e&&"CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&(y=e.dashTemplate,d=e.scaleDash,h=e.offsetAlongLine,u=e.primitiveName,(t=[...t]).pop())}null!=u&&v.push(...this._getPrimitiveMaterialOverrides(u,s).filter(e=>"dashTemplate"===e.propertyName));const O=void 0!==y?{type:"sprite-rasterization-param",resource:{type:"dash",dashTemplate:y,primitiveName:u},overrides:v}:null,g=m(this._poMap,e,o);this._cimLayers.push({type:"line",name:e.name,spriteRasterizationParam:O,isOutline:r,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(s,a,"Color",l),width:this._getValueOrOverrideExpression(s,a,"Width",n),cap:this._getValueOrOverrideExpression(s,a,"CapStyle",p),join:this._getValueOrOverrideExpression(s,a,"JoinStyle",c),miterLimit:f&&this._getValueOrOverrideExpression(s,a,"MiterLimit",f),referenceWidth:i,zOrder:oe(e.name),dashTemplate:this._maybeGetValueOrOverrideExpression(u,"DashTemplate")??y,offsetAlongLine:this._getValueOrOverrideExpression(s,u,"OffsetAlongLine",h??0),scaleDash:d,sampleAlphaOnly:!0,animationParams:he(g)})}_analyzePictureStroke(e,t,r,i,o){const{primitiveName:a,type:s}=e,l=A(e),n=T(e.width,_.CIMPictureStroke.width),p=Y(e.capStyle,_.CIMPictureStroke.capstyle),c=Y(e.joinStyle,_.CIMPictureStroke.joinstyle),f=e.miterLimit,y={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(a,s)},d=m(this._poMap,e,o);this._cimLayers.push({type:"line",name:e.name,spriteRasterizationParam:y,isOutline:r,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(s,a,"TintColor",l),width:this._getValueOrOverrideExpression(s,a,"Width",n),cap:this._getValueOrOverrideExpression(s,a,"CapStyle",p),join:this._getValueOrOverrideExpression(s,a,"JoinStyle",c),miterLimit:f&&this._getValueOrOverrideExpression(s,a,"MiterLimit",f),referenceWidth:i,zOrder:oe(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1,animationParams:he(d)})}_analyzeGradientStroke(e,t,r,i){const{gradientMethod:o,gradientSize:a,gradientSizeUnits:s,gradientType:l,interval:n,primitiveName:m,type:p}=e,c=_.CIMGradientStroke,f=T(e.width,c.width),y=Y(e.capStyle,c.capstyle),d=Y(e.joinStyle,c.joinstyle),h=e.miterLimit,u=e.colorRamp;this._cimLayers.push({type:"gradientStroke",name:e.name,spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(m,p)},colorLocked:!!e.colorLocked,effects:t,color:[255,255,255,1],width:this._getValueOrOverrideExpression(p,m,"Width",f),cap:this._getValueOrOverrideExpression(p,m,"CapStyle",y),join:this._getValueOrOverrideExpression(p,m,"JoinStyle",d),miterLimit:h&&this._getValueOrOverrideExpression(p,m,"MiterLimit",h),referenceWidth:i,isOutline:r,gradientMethod:this._getValueOrOverrideExpression(p,m,"GradientMethod",o??c.gradientMethod),gradientType:this._getValueOrOverrideExpression(p,m,"GradientType",l??c.gradientType),interval:this._getValueOrOverrideExpression(p,m,"Interval",T(n,"CIMFixedColorRamp"===u.type?u.colors.length:c.interval)),gradientSize:this._getValueOrOverrideExpression(p,m,"GradientSize",T(a,c.gradientSize)),gradientSizeUnits:"Absolute"===s?E.Absolute:"Relative"===s?E.Relative:c.gradientSizeUnits})}_analyzeMarker(e,t,r,i,o,a,s,l,n,y=!1,d=!1){y||=!!e.colorLocked;let h=n;if(h=p(e,h),h=c(this._poMap,e,h),h=f(e,h),h=m(this._poMap,e,h),this._analyzeMarkerInsidePolygon(e,t,y,h))return;const u=T(e.size,_.CIMVectorMarker.size),v=T(e.rotation),O=T(e.offsetX),g=T(e.offsetY),{primitiveName:S,type:M}=e,C=this._getValueOrOverrideExpression(M,S,"Size",u),k=this._getValueOrOverrideExpression(M,S,"Rotation",v),b=this._getValueOrOverrideExpression(M,S,"OffsetX",O),x=this._getValueOrOverrideExpression(M,S,"OffsetY",g);switch(e.type){case"CIMPictureMarker":this._analyzePictureMarker(e,t,r,i,o,a,C,k,b,x,l,h,y,d);break;case"CIMVectorMarker":this._analyzeVectorMarker(e,t,r,i,o,a,C,k,b,x,l,h,s,y,d)}}_analyzeMarkerInsidePolygon(e,t,r,i){const{markerPlacement:o,type:s}=e;if(!o||"CIMMarkerPlacementInsidePolygon"!==o.type||i.hasMotionAnimations)return!1;if("CIMVectorMarker"===s||"CIMPictureMarker"===s){const r=e.primitiveName;if(r&&this._analyzePrimitiveOverrides([r],t,null,null))return!1;const i=o.primitiveName;if(i&&this._analyzePrimitiveOverrides([i],t,null,null))return!1;if("CIMVectorMarker"===s){const{markerGraphics:t}=e;if(t)for(const e of t){const{symbol:t}=e;if("CIMPolygonSymbol"===t?.type&&t.symbolLayers){const{symbolLayers:e}=t;for(const t of e)if("CIMSolidStroke"===t.type)return!1}}}else{const{animatedSymbolProperties:t}=e;if(t)return!1}}const l=Math.abs(o.stepX),n=Math.abs(o.stepY);if(0===l||0===n)return!0;let m,p;if("Random"===o.gridType){const e=a($),t=Math.max(Math.floor(e/l),1);m=n*Math.max(Math.floor(e/n),1);p=t*l/m}else o.shiftOddRows?(m=2*n,p=l/n*.5):(m=n,p=l/n);const c=A(e),f="CIMCharacterMarker"===e.type?null:{type:"sprite-rasterization-param",resource:{...e,effects:e.effects?.filter(e=>!ne(e))},overrides:[]};return this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:f,colorLocked:r,effects:t,color:c,height:m,scaleX:p,angle:o.gridAngle??0,offsetX:T(o.offsetX),offsetY:T(o.offsetY),applyRandomOffset:"Random"===o.gridType,sampleAlphaOnly:"CIMPictureMarker"!==e.type,hasUnresolvedReplacementColor:!0,animationParams:he(i)}),!0}_analyzePictureMarker(e,t,i,o,a,l,n,m,p,c,f,y,d,h){const{animatedSymbolProperties:u,primitiveName:v,type:O}=e;let g=T(e.scaleX,1);const S=A(e);i||(i=this._createMarkerPlacementOverrideExpression(e.markerPlacement));const _=this._createGIFAnimatedSymbolPropertiesOverrideExpression(u),M=e.anchorPoint??{x:0,y:0};if("width"in e&&"number"==typeof e.width){const t=e.width;let r=1;const i=this._resourceManager.getResource(e.url);null!=i&&(r=i.width/i.height);g/=r*(T(e.size)/t)}const C=[...o];let k;e.primitiveName&&C.push(e.primitiveName),u||_?k={type:"animated",url:e.url,urlHash:"H"+s(e.url),playAnimation:e.animatedSymbolProperties?.playAnimation,reverseAnimation:e.animatedSymbolProperties?.reverseAnimation,randomizeStartTime:e.animatedSymbolProperties?.randomizeStartTime,randomizeStartSeed:e.animatedSymbolProperties?.randomizeStartSeed,startTimeOffset:e.animatedSymbolProperties?.startTimeOffset,duration:e.animatedSymbolProperties?.duration,repeatType:e.animatedSymbolProperties?.repeatType,repeatDelay:e.animatedSymbolProperties?.repeatDelay}:(k=r(e),k.markerPlacement=null);const b={type:"sprite-rasterization-param",resource:k,overrides:this._getMaterialOverrides(C,O)};_&&b.overrides.push(..._.overrides);const x=n;this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:b,colorLocked:d,effects:t,scaleSymbolsProportionally:!1,alignment:a,size:n,scaleX:this._getValueOrOverrideExpression(O,v,"ScaleX",g),rotation:m,offsetX:p,offsetY:c,transform:{type:"cim-marker-transform-param",params:f},color:this._getValueOrOverrideExpression(O,v,"TintColor",S),anchorPoint:{x:M.x,y:M.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:[0,0,0,0],outlineWidth:0,frameHeight:0,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:1,isOutline:h,markerPlacement:i,animationParams:he(y),baseSize:x})}_analyzeVectorMarker(e,t,r,i,o,a,s,l,n,m,p,c,f,u,v){const O=e.markerGraphics;if(!O)return;const g=e.frame;let S=0;S=g?g.ymax-g.ymin:a;const _=!!e.scaleSymbolsProportionally;if(S){const t={offsetX:n,offsetY:m,rotation:l,size:s,frameHeight:S,rotateClockWise:!!e.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:_};p=[...p,t]}r||(r=this._createMarkerPlacementOverrideExpression(e.markerPlacement));for(const M of O)if(M){const s=M.symbol;if(!s)continue;const l=M.primitiveName;l&&i.push(l);let n,m=c;if(("CIMPointSymbol"===s.type||"CIMTextSymbol"===s.type)&&g){let t=0,r=0;const i=M.geometry;"x"in i&&"y"in i&&(t+=i.x-.5*(g.xmin+g.xmax),r+=i.y-.5*(g.ymin+g.ymax));const o=e.anchorPoint;let a=!1;o&&("Absolute"===e.anchorPointUnits?(t-=o.x,r-=o.y,a=!0):g&&(t-=(g.xmax-g.xmin)*o.x,r-=(g.ymax-g.ymin)*o.y));const s={offsetX:t,offsetY:r,rotation:0,size:0,frameHeight:0,rotateClockWise:!1,absoluteAnchorPoint:a,scaleSymbolsProportionally:_};n=[...p,s]}const O=M.geometry,[C,k]=y(O,g);switch(0===C&&0===k||(m=d(m,C,k)),s.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":f||le(s)?(m={...m,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!0,selectGlobalRotation:!1,translation:h([0,0]),rotation:h(0),scale:h(S),parent:c.transform}},this._analyzeMultiLayerGraphicNonSDF(e,t,r,M,i,o,a,n??p,m,S,u,v)):this._analyzeMultiLayerGraphic(e,t,r,M,i,o,a,n??p,m,S,u,v);break;case"CIMTextSymbol":this._analyzeTextGraphic(t,r,M,i,o,a,n??p,u)}l&&i.pop()}}_analyzeMultiLayerGraphic(e,t,r,i,o,a,s,l,n,m,p,c){const f=i.symbol,y=f.symbolLayers;if(y){if(!se(y)||u(n))return fe(y)?(g(f,e=>{e.colorLocked&&(p=!0)}),void this._analyzeMultiLayerGraphicNonSDF(e,t,r,i,o,a,s,l,n,m,p,c)):void this._analyzeMarkerGraphicSymbolLayers(e,t,r,i,o,a,s,l,n,m,p,c);this._analyzeCompositeMarkerGraphic(e,t,r,i,y,a,s,l,m,p,c)}}_analyzeMarkerGraphicSymbolLayers(e,t,r,i,o,a,s,l,n,p,c,f){const y=i.symbol,d=y.symbolLayers;if(!d)return;const h=Q.applyEffects(y.effects,i.geometry);if(!h)return;let u=d.length;for(;u--;){const y=d[u];if(!y||!1===y.enable)continue;const v=y.primitiveName;switch(v&&o.push(v),y.type){case"CIMSolidFill":case"CIMSolidStroke":{const o=Q.applyEffects(y.effects,h),d=P(o);if(!d)continue;const u="Relative"!==e.anchorPointUnits,O="CIMSolidStroke"===y.type?y.width:0,{frameSizeRatio:g,anchorX:S,anchorY:M,widthRatio:C,sdfPaddingRatio:k,sdfTextureSize:b}=z(d,e.frame,e.size,e.anchorPoint,u,O,e.scaleSymbolsProportionally),x="CIMSolidFill"===y.type,E={type:"sdf",geometry:o,sdfPaddingRatio:k,asFill:x,sdfTextureSize:b},{path:L}=y,N=x?V(j(y)):null==L?V(W(y)):[0,0,0,0],R=x?[0,0,0,0]:V(W(y));if(!x&&!O)break;const w=i.primitiveName;let G=null;x&&!y.colorLocked&&(G=this._maybeGetValueOrOverrideExpression(w,"FillColor"));let A=null;x||y.colorLocked||(A=this._maybeGetValueOrOverrideExpression(w,"StrokeColor"));const F=G??this._getValueOrOverrideExpression(y.type,v,"Color",N),X=A??this._getValueOrOverrideExpression(y.type,v,"Color",R),Y=this._maybeGetValueOrOverrideExpression(w,"StrokeWidth")??this._getValueOrOverrideExpression(y.type,v,"Width",O),D=L?{type:"sprite-rasterization-param",resource:{type:"path",path:L,asFill:x},overrides:[]}:{type:"sprite-rasterization-param",resource:E,overrides:[]},H=m(this._poMap,y,n),U=T(e.size,_.CIMVectorMarker.size),J=this._getValueOrOverrideExpression(e.type,e.primitiveName,"Size",U);this._cimLayers.push({type:"marker",name:y.name,groupName:e.name,spriteRasterizationParam:D,colorLocked:!!y.colorLocked||!!c,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:S,y:M},isAbsoluteAnchorPoint:u,size:p,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:p,widthRatio:C,rotateClockwise:!1,referenceSize:s,sizeRatio:g,color:F,outlineColor:X,outlineWidth:Y,isOutline:f,markerPlacement:r,animationParams:he(H),isStroke:"CIMSolidFill"!==y.type,baseSize:J,...I(o,b,k)});break}case"CIMPictureMarker":case"CIMVectorMarker":if(y.markerPlacement){ee().error("Error analyzing CIM, got unexpected marker placement");break}this._analyzeMarker(y,t,r,o,a,s,!1,l,n,c,f)}v&&o.pop()}}_analyzeTextGraphic(e,r,i,o,a,s,l,n){const m=[];k.findApplicableOverrides(i,this._primitiveOverrides,m);const p=i.geometry;if(!("x"in p)||!("y"in p))return;const c=i.symbol,f=D(c),y=C(c.fontStyleName),d=t(c.fontFamilyName);c.font={family:d,decoration:f,...y};const h=T(c.height,_.CIMTextSymbol.height),u=T(c.angle),v=T(c.offsetX),O=T(c.offsetY),{haloSymbol:g}=c,S=T(c.haloSize,0);let M=[0,0,0,0];if(g?.symbolLayers?.length){const e=g.symbolLayers;for(const t of e)if(t.color){M=this._getValueOrOverrideExpression(c?.haloSymbol?.type??"CIMPolygonSymbol",t.primitiveName,"Color",V(t.color));break}}const x=i.primitiveName;let P=[0,0,0,1],z=[0,0,0,0],I=0,E=!1;if(c.symbol?.symbolLayers)for(const t of c.symbol.symbolLayers){const e=t.primitiveName;if("CIMSolidStroke"===t.type)z=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Color",V(t.color)),I=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Width",H(t)??0);else if("CIMSolidFill"===t.type){const r=V(t.color);E=E??!!t.colorLocked,P=this._getValueOrOverrideExpression("CIMSolidFill",e??x,"Color",r)}}let L=null,N=null,R=null,w=null,G=null;x&&(L=this._maybeGetValueOrOverrideExpression(x,"TextSize"),N=this._maybeGetValueOrOverrideExpression(x,"TextAngle"),R=this._maybeGetValueOrOverrideExpression(x,"TextOffsetX"),w=this._maybeGetValueOrOverrideExpression(x,"TextOffsetY"),E||(G=this._maybeGetValueOrOverrideExpression(x,"FillColor")));const A=G??P;let F=null,X=null,Y=0;if("CIMBackgroundCallout"===c.callout?.type){const e=c.callout;if(e.backgroundSymbol){const t=e.backgroundSymbol.symbolLayers;if(t)for(const e of t)"CIMSolidFill"===e.type?F=V(e.color):"CIMSolidStroke"===e.type&&(X=V(e.color),Y=T(e.width,_.CIMSolidStroke.width))}}const j=this._getValueOrOverrideExpression(c.type,i.primitiveName,"TextString",i.textString??"");if(null==j)return;const{fontStyleName:W}=c,B=d+(W?"-"+W.toLowerCase():"-regular"),q=this._getMaterialOverrides(o,c.type);q.push(...this._getPrimitiveMaterialOverrides(i.primitiveName,c.type)),this._collectDictionaryTemplateOverrides(q,i);const K={type:"text-rasterization-param",resource:{type:"text",textString:i.textString??"",font:c.font,symbol:c,primitiveName:i.primitiveName,supportsRichText:b(i.textString??"")||q.some(e=>"textString"===e.propertyName)},overrides:q};this._cimLayers.push({type:"text",lineWidth:c.lineWidth,textRasterizationParam:K,colorLocked:!!n||!!E,effects:e,alignment:a,anchorPoint:{x:0,y:0},isAbsoluteAnchorPoint:!1,fontName:B,decoration:f,haloSize:S,haloColor:M,weight:y.weight,style:y.style,size:L??h,angle:N??u,offsetX:R??v,offsetY:w??O,transform:{type:"cim-marker-transform-param",params:l},horizontalAlignment:J(c.horizontalAlignment),verticalAlignment:U(c.verticalAlignment),text:j,color:A,outlineColor:z,outlineSize:I,backgroundColor:F,borderLineColor:X,borderLineWidth:Y,referenceSize:s,sizeRatio:1,markerPlacement:r})}_collectDictionaryTemplateOverrides(e,t){if(t.textString&&this._hasTextStringTemplates){const r=B(t.symbol);e.push({propertyName:"textString",defaultValue:"",valueExpressionInfo:{type:"dictionary-template",textCase:r,template:t.textString},primitiveName:t.primitiveName})}}_analyzeMultiLayerGraphicNonSDF(e,t,r,i,a,s,l,n,m,p,c,f){const y=ie(e,i),d=e.primitiveName,h=this._analyzeMaterialOverrides(d,["Rotation","OffsetX","OffsetY"]),u=F(h),[v,g,S]=O.getTextureAnchor(y,this._resourceManager,Z),M=this._getMaterialOverrides(a,e.type).filter(e=>e.primitiveName!==d||!["rotation","offsetX","offsetY"].includes(e.propertyName));M.push(...u);const C={type:"sprite-rasterization-param",resource:{...y,avoidSDFRasterization:!0},overrides:M},k=T(e.size,_.CIMVectorMarker.size),b=this._getValueOrOverrideExpression(e.type,d,"Size",k);this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:C,colorLocked:c,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:s,anchorPoint:{x:v,y:g},isAbsoluteAnchorPoint:!1,size:p,rotation:0,offsetX:0,offsetY:0,transform:{type:"cim-marker-transform-param",params:n},color:[255,255,255,1],outlineColor:[0,0,0,0],outlineWidth:0,scaleX:1,frameHeight:p,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:S/o(e.size),isOutline:f,markerPlacement:r,animationParams:he(m),baseSize:b})}_createMarkerPlacementOverrideExpression(e){if(!e)return null;const t=[];return k.findApplicableOverrides(e,this._primitiveOverrides,t),{type:"cim-marker-placement-param",placement:e,overrides:de(t)}}_createGIFAnimatedSymbolPropertiesOverrideExpression(e){if(!e)return null;const t=[];return k.findApplicableOverrides(e,this._primitiveOverrides,t),{type:"cim-gif-animation-params",animation:e,overrides:de(t)}}_analyzeCompositeMarkerGraphic(e,t,r,i,o,a,s,l,n,m,p){const c=i.geometry,f=o[0],y=o[1],d=P(c);if(!d)return;const h="Relative"!==e.anchorPointUnits,u=T(f.width,_.CIMSolidStroke.width),{frameSizeRatio:v,anchorX:O,anchorY:g,widthRatio:S,sdfPaddingRatio:M,sdfTextureSize:C}=z(d,e.frame,e.size,e.anchorPoint,h,u,e.scaleSymbolsProportionally),{path:k}=y,b=y.primitiveName,x=f.primitiveName,I=i.primitiveName;let E=null;y.colorLocked||m||(E=this._maybeGetValueOrOverrideExpression(I,"FillColor"));const L=E??this._getValueOrOverrideExpression(y.type,b,"Color",V(y.color));let N=null;f.colorLocked||m||(N=this._maybeGetValueOrOverrideExpression(I,"StrokeColor"));const R=N??this._getValueOrOverrideExpression(f.type,x,"Color",V(f.color)),w=this._maybeGetValueOrOverrideExpression(I,"StrokeWidth")??this._getValueOrOverrideExpression(f.type,x,"Width",u),G={type:"sprite-rasterization-param",resource:k?{type:"path",path:k,asFill:!0}:{type:"sdf",geometry:c,sdfTextureSize:C,sdfPaddingRatio:M,asFill:!0},overrides:[]};this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:G,colorLocked:m,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:O,y:g},isAbsoluteAnchorPoint:h,size:n,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:n,widthRatio:S,rotateClockwise:!1,referenceSize:s,sizeRatio:v,color:L,outlineColor:R,outlineWidth:w,isOutline:p,markerPlacement:r})}_setPoMap(e,t,r){let i;this._poMap[e]?i=this._poMap[e]:(i={},this._poMap[e]=i),i[t]=r}_maybeGetValueOrOverrideExpression(e,t,r){return this._getValueOrOverrideExpression("",e,t,r,!1)}_getValueOrOverrideExpression(e,t,r,i,o=!0){if(o&&!q(i)&&(i=X(e,r.toLowerCase())),null==t)return i;const a=this._poMap[t];if(null==a)return i;const s=a[r];return"string"==typeof s||"number"==typeof s||Array.isArray(s)?s:s?{valueExpressionInfo:s,defaultValue:i}:i}_analyzePrimitiveOverrides(e,t,r,i){if(null==e)return!1;"string"==typeof e&&(e=[e]);for(const o of this._primitiveOverrides)if(e.includes(o.primitiveName)&&o.valueExpressionInfo)return!0;if(null!=t)for(const o of t)if(o?.overrides.length>0)return!0;if(null!=r)for(const o of r)if(o?.overrides.length>0)return!0;if(null!=i)for(const o of i)if(o?.overrides.length>0)return!0;return!1}_getMaterialOverrides(e,t){if(!e)return[];const r=[];for(const i of e)r.push(...this._getPrimitiveMaterialOverrides(i,t));return r}_getPrimitiveMaterialOverrides(e,t){if(!e)return[];const r=F(this._primitiveOverrides.filter(t=>t.primitiveName===e));return r.forEach(e=>e.defaultValue=X(t,e.propertyName.toLowerCase())),r}_analyzeMaterialOverrides(e,t){return this._primitiveOverrides.filter(r=>r.primitiveName!==e||!t.includes(r.propertyName))}}function ie(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 oe(e){if(e?.startsWith("Level_")){const t=parseInt(e.slice(6),10);if(!isNaN(t))return t}return 0}function ae(e,t){if(!t||0===t.length)return e;const i=r(e);return k.applyOverrides(i,t),i}const se=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&null==e[0].path&&null==e[1].path&&!e[0].effects&&!e[1].effects&&!e[0].animations&&!e[1].animations;function le(e){const t=e.symbolLayers;if(!t)return!1;const r=t.find(e=>e.effects?.find(e=>"CIMGeometricEffectDashes"===e.type&&null!=e.dashTemplate)),i=t.find(e=>e.effects?.find(e=>"CIMGeometricEffectAddControlPoints"===e.type));return!!r||!!i}function ne(e){return me(e)}function me(e){return"CIMGeometricEffectCircularSector"===e.type||"CIMGeometricEffectRadial"===e.type||"CIMGeometricEffectTaperedPolygon"===e.type||"PrivateDimensionEffect"===e.type||"PrivateMatcherGeometryOverrideEffect"===e.type}function pe(e){return"CIMGeometricEffectCircularSector"===e.type||"CIMGeometricEffectTaperedPolygon"===e.type}function ce(e,t){const r=e.some(e=>"CIMSolidFill"===e.type),i=e.every(e=>"CIMSolidFill"===e.type||"CIMSolidStroke"===e.type);return r&&i&&t.some(({effect:e})=>pe(e))}function fe(e){return e.some(e=>"CIMSolidFill"!==e.type&&"CIMSolidStroke"!==e.type&&("CIMVectorMarker"!==e.type&&"CIMPictureMarker"!==e.type||null!=e.markerPlacement))}function ye(e,t){if((t?.some(e=>"CIMGeometricEffectRadial"===e.type)&&t?.some(e=>"CIMGeometricEffectTaperedPolygon"===e.type)||t?.some(e=>"CIMGeometricEffectCircularSector"===e.type))&&2===e.length){const t=e.find(e=>"CIMSolidFill"===e.type),r=e.find(e=>"CIMSolidStroke"===e.type),i=r?.effects?.some(e=>"CIMGeometricEffectDashes"===e.type);if(null!=t&&null!=r&&!i)return!0}return!1}function de(e){return r(e).map(e=>({...e,propertyName:K(e.propertyName)}))}function he(e){return u(e)?{type:"animation-params",params:e}:null}export{re as CIMAnalyzer,ae as analyzeCIMResource};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
+
function e(e){return e.split(" ").map(e=>Number(e))}function t(t){return"string"==typeof t?e(t):t}function n(e){let t=e.slice();t.length%2&&(t=[...t,...t]);let n=0;for(;n<t.length&&0===t[n];)n++;let h=0;const l=[];for(let s=n;s<t.length;s++)0===t[s]?h++:0===h?l.push(t[s]):1&h?(l[l.length-1]+=t[s],h=0):(l.push(t[s]),h=0);return t=l,t.length<=1?0===t.length||n%2==0?{dashTemplate:[],hidesLine:!1}:{dashTemplate:[],hidesLine:!0}:(t.length%2==1?n%2==1?t.unshift(0):t.push(0):n%2==1&&(t.unshift(0),t.push(0)),{dashTemplate:t,hidesLine:!1})}function h(e){return e?.dashTemplate&&(e.dashTemplate=t(e.dashTemplate)),e}export{h as normalizeDashEffectTemplate,n as normalizeDashPatternTemplate,t as normalizeDashTemplate,e as parseDashTemplate};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{GeometryCursor as t}from"../../../geometry/GeometryCursor.js";import{collectPath as e}from"../../../geometry/geometryCursorCollectUtils.js";import{PathEffectCursor as s}from"../CIMCursor.js";import{
|
|
2
|
+
import{GeometryCursor as t}from"../../../geometry/GeometryCursor.js";import{collectPath as e}from"../../../geometry/geometryCursorCollectUtils.js";import{PathEffectCursor as s}from"../CIMCursor.js";import{normalizeDashEffectTemplate as i,normalizeDashPatternTemplate as r}from"../dashUtils.js";import{GeometryWalker as a,DashPattern as n}from"../GeometryWalker.js";class h{static{this.instance=null}static local(){return null===h.instance&&(h.instance=new h),h.instance}execute(t,e,s){return new l(t,e,s)}}class l extends s{constructor(t,e,s){super(t,!0,!0),this._firstCurve=null;const h=s.geomUnitsPerPoint;this._walker=new a,this._walker.updateTolerance(h),this._endings=e.lineDashEnding??"NoConstraint",this._customDashPos=-(e.offsetAlongLine??0)*h,this._offsetAtEnd=(e.customEndingOffset??0)*h;let l=i(e).dashTemplate;null==l&&(l=[]);const o=r(l);l=o.hidesLine?[-1]:o.dashTemplate,this._pattern=new n,this._pattern.init(l,!1),this._pattern.scale(h)}processPath(s){if(this._pattern.size()%2==1)return null;if(0===this._pattern.length()){this.iteratePath=!1;const i=e(s);return t.fromJSONCIM({paths:[i]})}if(!this.iteratePath){let i=!0;switch(this._endings){case"HalfPattern":case"HalfGap":default:this._pattern.extPtGap=0;break;case"FullPattern":this.isClosed||(this._pattern.extPtGap=.5*this._pattern.firstValue());break;case"FullGap":this.isClosed||(this._pattern.extPtGap=.5*this._pattern.lastValue());break;case"NoConstraint":this.isClosed||(i=!1);break;case"Custom":this.isClosed||(this._pattern.extPtGap=.5*this._offsetAtEnd)}const r=s.pathLength();if(this._pattern.isEmpty()||r<.1*this._pattern.length()){const i=e(s);return t.fromJSONCIM({paths:[i]})}if(!this._walker.init(s,this._pattern,i)){const i=e(s);return t.fromJSONCIM({paths:[i]})}}let i;if(this.iteratePath)i=this._pattern.nextValue();else{let t;switch(this._endings){case"HalfPattern":default:t=.5*this._pattern.firstValue();break;case"HalfGap":t=.5*-this._pattern.lastValue();break;case"FullGap":t=-this._pattern.lastValue();break;case"FullPattern":t=0;break;case"NoConstraint":case"Custom":t=-this._customDashPos}let e=t/this._pattern.length();e-=Math.floor(e),t=e*this._pattern.length(),this._pattern.reset(),i=this._pattern.nextValue();let s=!1;for(;t>=i;)t-=i,i=this._pattern.nextValue(),s=!s;i-=t,s?(this._walker.nextPosition(i),i=this._pattern.nextValue()):this.isClosed&&(this._firstCurve=this._walker.nextCurve(i),i=this._pattern.nextValue(),this._walker.nextPosition(i),i=this._pattern.nextValue())}0===i&&(i=this._pattern.nextValue(),this._walker.nextPosition(i),i=this._pattern.nextValue());let r=this._walker.nextCurve(i);if(r)if(this._walker.isPathEnd()){if(this.iteratePath=!1,this._firstCurve){for(this._firstCurve.nextPath();this._firstCurve.nextPoint();)r.pushXY(this._firstCurve.x,this._firstCurve.y);this._firstCurve=null}}else i=this._pattern.nextValue(),!this._walker.nextPosition(i)||this._walker.isPathEnd()?(this.iteratePath=!1,this._firstCurve&&(r.pushCursor(this._firstCurve),this._firstCurve=null)):this.iteratePath=!0;else this.iteratePath=!1,r=this._firstCurve,this._firstCurve=null;return r?.reset(),r}}export{h as EffectDashes};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
+
function l(l){let i="normal",e="normal";if(l){const t=l.toLowerCase();t.includes("italic")?i="italic":t.includes("oblique")&&(i="oblique"),t.includes("bold")?e="bold":t.includes("light")&&(e="lighter")}return{style:i,weight:e}}export{l as fromCIMFontStyle};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import t from"../../Color.js";import{fromCIMFontStyle as n}from"./
|
|
2
|
+
import t from"../../Color.js";import{fromCIMFontStyle as n}from"./fromCIMFontStyle.js";const e=/([A-Za-z_][\w-]*)\s*=\s*(['"])(.*?)\2/g,r=/&(amp|lt|gt|quot|apos);/g,o=/<\s*\/?\s*(?:CLR|BOL|_BOL|ITA|_ITA|UND|_UND|FNT|CHR)\b/i;function i(t){return o.test(t)}function a(t){if(!t.supportsRichText||!t.textString.includes("<"))return null;const n=c(t),e=[],r=[];let o=s(n),i="",a=!1;const f=t.textString,g=()=>{if(!i)return;const t=l(i);if(!t)return void(i="");const n=r[r.length-1];n&&u(n,o)?n.text+=t:r.push({text:t,font:{...o.font},fontSize:o.fontSize,characterSpacing:o.characterSpacing,color:o.color}),i=""};let p=0;for(;p<f.length;){const t=f[p];if("<"!==t){i+=t,p++;continue}const n=f.indexOf(">",p+1);if(-1===n)return null;const r=h(f.slice(p+1,n));if(!r)return null;if(a=!0,g(),r.isEnd){const t=e.pop();if(!t||t.name!==r.name)return null;o=t.previous}else{const t=s(o);o=m(o,r),e.push({name:r.name,previous:t})}p=n+1}return e.length?null:(g(),a?r.filter(t=>t.text.length>0):null)}function c(t){return{font:{...t.font},fontSize:t.symbol?.height&&!isNaN(t.symbol.height)?t.symbol.height:10,characterSpacing:0}}function s(t){return{font:{...t.font},fontSize:t.fontSize,characterSpacing:t.characterSpacing,color:t.color}}function u(t,n){return t.fontSize===n.fontSize&&t.characterSpacing===n.characterSpacing&&t.font.family===n.font.family&&t.font.style===n.font.style&&t.font.weight===n.font.weight&&t.font.decoration===n.font.decoration&&f(t.color,n.color)}function f(t,n){return t===n||!!t&&!!n&&t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]}function l(t){return t.replaceAll(r,(t,n)=>{switch(n){case"amp":return"&";case"lt":return"<";case"gt":return">";case"quot":return'"';case"apos":return"'";default:return t}})}function h(t){const n=t.trim();if(!n)return null;const r=n.startsWith("/"),o=r?n.slice(1).trim():n,i=/^([A-Za-z_][\w-]*)/.exec(o);if(!i)return null;const a=i[1],c=o.slice(a.length),s={};let u;for(e.lastIndex=0;u=e.exec(c);)s[u[1]]=u[3];return{isEnd:r,name:a,attributes:s}}function m(t,n){const e=s(t);switch(n.name.toUpperCase()){case"BOL":e.font.weight="bold";break;case"_BOL":e.font.weight="normal";break;case"ITA":e.font.style="italic";break;case"_ITA":e.font.style="normal";break;case"UND":e.font.decoration="underline";break;case"_UND":e.font.decoration="none";break;case"FNT":p(e,n.attributes);break;case"CLR":e.color=b(n.attributes);break;case"CHR":g(e,n.attributes)}return e}function g(t,n){const e=Number(n.spacing);!isNaN(e)&&e>=0&&(t.characterSpacing=e/100)}function p(t,e){const{name:r,style:o,size:i,scale:a,wght:c,ital:s}=e;if(r&&(t.font.family=r),o){const e=n(o);t.font.style=e.style,t.font.weight=e.weight}if(c){const n=Number(c);t.font.weight=n>=600?"bold":"normal"}if(s){const n=Number(s);isNaN(n)||(t.font.style=0!==n?"italic":"normal")}if(i){const n=Number(i);!isNaN(n)&&n>0&&(t.fontSize=n)}if(a){const n=Number(a);!isNaN(n)&&n>0&&(t.fontSize*=n/100)}}function b(n){if(n.hex){const e=t.fromHex(n.hex)?.toArray();if(e){const t="alpha"in n?S(n.alpha):e[3];return[e[0],e[1],e[2],t]}}if("red"in n||"green"in n||"blue"in n)return[N(n.red),N(n.green),N(n.blue),S(n.alpha)];const e=d(n.cyan),r=d(n.magenta),o=d(n.yellow),i=d(n.black),a=S(n.alpha),c=d(n.tint,100)/100,s=1-i;return[Math.round(255*(1-e)*s*c),Math.round(255*(1-r)*s*c),Math.round(255*(1-o)*s*c),a]}function N(t){const n=Number(t);return y(isNaN(n)?0:n)}function d(t,n=0){const e=Number(t);return x((isNaN(e)?n:e)/100)}function S(t){return Math.round(255*d(t,100))}function y(t){return Math.max(0,Math.min(255,Math.round(t)))}function x(t){return Math.max(0,Math.min(1,t))}export{i as hasRichTextFormattingTags,a as parseRichTextRuns};
|
package/symbols/cim/utils.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{defaultCIMValues as e,defaultCIMColor as t}from"./defaultCIMValues.js";function r(e){return"function"==typeof e}function n(e,t,n,o){return r(e)?e(t,n,o):e}function o(e){return[e.r,e.g,e.b,e.a]}const i=" /-,\n";function a(e){let t=e.length;for(;t--;)if(!i.includes(e.charAt(t)))return!1;return!0}function l(e,t){const r=[];let n=0,o=-1;do{if(o=e.indexOf("[",n),o>=n){if(o>n){const t=e.slice(n,o);r.push([t,null,a(t)])}if(n=o+1,o=e.indexOf("]",n),o>=n){if(o>n){const i=t[e.slice(n,o)];i&&r.push([null,i,!1])}n=o+1}}}while(-1!==o);if(n<e.length){const t=e.slice(n);r.push([t,null,a(t)])}return r}function c(e,t,r){let n="",o=null;for(const i of t){const[t,r,a]=i;if(null!=t&&""!==t)a?o=t:(null!=o&&(n+=o,o=null),n+=t);else{const t=e.readAttribute(r);null!=t&&""!==t&&(null!==o&&(n+=o,o=null),n+=t)}}return u(n,r)}function s(e,t,r,n){let o="",i=null;for(const a of t){const[t,n,l]=a;if(null!=t&&""!==t)l?i=t:(null!=i&&(o+=i,i=null),o+=t);else{let t=n;null!=r&&(t=Y(n,r));const a=e.attributes[t];null!=a&&""!==a&&(null!=i&&(o+=i,i=null),o+=a)}}return u(o,n)}function u(e,t){switch("string"!=typeof e&&(e=String(e)),t){case"LowerCase":return e.toLowerCase();case"Allcaps":return e.toUpperCase();default:return e}}function f(e,t,r,n,o,i,a=!0){const l=t/o,c=r/i,s=Math.ceil(l/2),u=Math.ceil(c/2);for(let f=0;f<i;f++)for(let r=0;r<o;r++){const M=4*(r+(a?i-f-1:f)*o);let y=0,m=0,C=0,h=0,I=0,b=0,p=0;const d=(f+.5)*c;for(let n=Math.floor(f*c);n<(f+1)*c;n++){const o=Math.abs(d-(n+.5))/u,i=(r+.5)*l,a=o*o;for(let c=Math.floor(r*l);c<(r+1)*l;c++){let r=Math.abs(i-(c+.5))/s;const o=Math.sqrt(a+r*r);o>=-1&&o<=1&&(y=2*o*o*o-3*o*o+1,y>0&&(r=4*(c+n*t),p+=y*e[r+3],C+=y,e[r+3]<255&&(y=y*e[r+3]/250),h+=y*e[r],I+=y*e[r+1],b+=y*e[r+2],m+=y))}}n[M]=h/m,n[M+1]=I/m,n[M+2]=b/m,n[M+3]=p/C}}function M(e){return e?[e[0],e[1],e[2],e[3]/255]:[0,0,0,0]}function y(e){return e.data?.symbol??null}function m(e){return"CIMVectorMarker"===e.type||"CIMPictureMarker"===e.type||"CIMBarChartMarker"===e.type||"CIMCharacterMarker"===e.type||"CIMPieChartMarker"===e.type||"CIMStackedBarChartMarker"===e.type}function C(e){return"CIMGradientStroke"===e.type||"CIMPictureStroke"===e.type||"CIMSolidStroke"===e.type}function h(e){return null!=e&&("CIMGradientFill"===e.type||"CIMHatchFill"===e.type||"CIMPictureFill"===e.type||"CIMSolidFill"===e.type||"CIMWaterFill"===e.type)}function I(e){return null!=e&&("CIMMarkerPlacementAlongLineRandomSize"===e.type||"CIMMarkerPlacementAlongLineSameSize"===e.type||"CIMMarkerPlacementAlongLineVariableSize"===e.type||"CIMMarkerPlacementAtExtremities"===e.type||"CIMMarkerPlacementAtMeasuredUnits"===e.type||"CIMMarkerPlacementAtRatioPositions"===e.type||"CIMMarkerPlacementOnLine"===e.type||"CIMMarkerPlacementOnVertices"===e.type)}const b=(e,t=0)=>null==e||isNaN(e)?t:e,p=(e,t)=>null!=e?e:t,d=(e,t)=>e??t,k=e=>e.tintColor?M(e.tintColor):[255,255,255,1];function S(e){if(!e)return"normal";switch(e.toLowerCase()){case"italic":return"italic";case"oblique":return"oblique";default:return"normal"}}function g(e){if(!e)return"normal";switch(e.toLowerCase()){case"bold":return"bold";case"bolder":return"bolder";case"lighter":return"lighter";default:return"normal"}}function P(e){let t="normal",r="normal";if(e){const n=e.toLowerCase();n.includes("italic")?t="italic":n.includes("oblique")&&(t="oblique"),n.includes("bold")?r="bold":n.includes("light")&&(r="lighter")}return{style:t,weight:r}}function w(e){return e.underline?"underline":e.strikethrough?"line-through":"none"}function L(e){if(!e)return null;switch(e.type){case"CIMPolygonSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=L(t);if(null!=e)return e}break;case"CIMTextSymbol":return L(e.symbol);case"CIMSolidFill":return e.color}return null}function G(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":{const t=e.symbolLayers;if(t)for(const e of t){const t=G(e);if(null!=t)return t}break}case"CIMTextSymbol":return G(e.symbol);case"CIMSolidStroke":return e.color}}function E(e){for(const t of e)if(t.enable)switch(t.type){case"CIMSolidStroke":case"CIMGradientStroke":case"CIMPictureStroke":return!0}return!1}function A(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=A(t);if(void 0!==e)return e}break;case"CIMTextSymbol":return A(e.symbol);case"CIMSolidStroke":case"CIMGradientStroke":case"CIMPictureStroke":return e.width}}function x(t){let r=0;for(const n of t??[])!1!==n.enable&&C(n)&&(r=Math.max(r,b(n.width,e[n.type].width)));return r}function T(e){switch(e){case"Left":default:return"left";case"Right":return"right";case"Center":return"center";case"Justify":return"justify"}}function v(e){switch(e){default:case"Bottom":return"bottom";case"Top":return"top";case"Center":return"middle";case"Baseline":return"baseline"}}function N(e){return(e?Object.keys(e):[]).map(t=>({name:t,alias:t,type:"string"==typeof e[t]?"esriFieldTypeString":"esriFieldTypeDouble"}))}const F=e=>e.includes("data:image/svg+xml");function z(e){if(!e)return null;switch(e.type){case"CIMPointSymbol":case"CIMTextSymbol":return"esriGeometryPoint";case"CIMLineSymbol":return"esriGeometryPolyline";case"CIMPolygonSymbol":return"esriGeometryPolygon";default:return null}}function V(e){return e?e.charAt(0).toLowerCase()+e.slice(1):e}function O(e,t,r,n,o,i,a=!0){const{infos:l}=i;let c=1,s=0,u=0,f=0,M=1;for(const{absoluteAnchorPoint:C,offsetX:h,offsetY:I,rotation:b,size:p,frameHeight:d,rotateClockWise:k,scaleSymbolsProportionally:S}of l){M=C?1:c;u=Q(h,I,s,M,u),f=K(h,I,s,M,f),d&&(S||a)&&(c*=p/d),s=Z(b,k,s)}const y=Q(n,o,s,M,u),m=K(n,o,s,M,f);return{size:e*c,rotation:Z(t,r,s),offsetX:y,offsetY:m}}function R(e){if(null==e)return!1;if(Array.isArray(e))return e.every(e=>R(e));switch(typeof e){case"string":return!!e;case"number":return!isNaN(e)}}function D(r,n){if("color"===n||"outlinecolor"===n||"backgroundcolor"===n||"borderlinecolor"===n||"tintcolor"===n)return[...t[n]];const o=e[r];if(!o)throw new Error(`InternalError: default value for type ${r}.`);return o[n]}function W(e){return e.split(" ").map(e=>Number(e))}function j(e){return"string"==typeof e?W(e):e}function q(e){return e?.dashTemplate&&(e.dashTemplate=j(e.dashTemplate)),e}function B(e){if(null==e)return"Normal";switch(e.type){case"CIMTextSymbol":return e.textCase??"Normal";case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const t=e.symbolLayers;if(!t)return"Normal";for(const e of t)if("CIMVectorMarker"===e.type)return B(e)}break;case"CIMVectorMarker":{const t=e.markerGraphics;if(!t)return"Normal";for(const e of t)if(e.symbol)return B(e.symbol)}}return"Normal"}function X(t){if(t)switch(t.type){case"CIMTextSymbol":return t.height;case"CIMPointSymbol":{let r=0;if(t.symbolLayers)for(const n of t.symbolLayers)if(n)switch(n.type){case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":case"CIMObjectMarker3D":case"CIMglTFMarker3D":{const t=n.size??e.CIMVectorMarker.size;t>r&&(r=t);break}}return r}case"CIMLineSymbol":case"CIMPolygonSymbol":{let r=0;if(t.symbolLayers)for(const n of t.symbolLayers)if(n)switch(n.type){case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":{const e=n.width;null!=e&&e>r&&(r=e);break}case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":case"CIMObjectMarker3D":case"CIMglTFMarker3D":if(n.markerPlacement&&I(n.markerPlacement)){const t=n.size??e.CIMVectorMarker.size;t>r&&(r=t)}break;case"CIMPictureFill":{const e=n.height;null!=e&&e>r&&(r=e)}}return r}}}function Y(e,t){if(null!==t){const r=t.get(e);return r?r.name:e}return e}function H(e){return e.map(e=>({...e,propertyName:V(e.propertyName)}))}function J(e){const t={};for(const r in e){const n=e[r];t[V(r)]=n}return t}function U(e){if(!e)return 0;let t=0;for(const r of e)t+=$(r);return t}function $(e){if(!e)return 0;if(re(e))return e.inflateSize??256;switch(e.type){case"CIMGeometricEffectArrow":return Math.abs(.5*e.width);case"CIMGeometricEffectBuffer":return Math.abs(e.size);case"CIMGeometricEffectCircularSector":return Math.abs(e.radius??25);case"CIMGeometricEffectControlMeasureLine":return 500;case"CIMGeometricEffectExtension":return Math.abs(e.length);case"CIMGeometricEffectJog":return Math.abs(.5*e.length);case"CIMGeometricEffectMove":return Math.max(Math.abs(b(e.offsetX)),Math.abs(b(e.offsetY)));case"CIMGeometricEffectOffset":case"CIMGeometricEffectOffsetTangent":return Math.abs(e.offset);case"CIMGeometricEffectRadial":return Math.abs(e.length??5);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);case"CIMGeometricEffectDonut":return Math.abs(e.width)}}function K(e,t,r,n,o){const i=r*Math.PI/180;if(i){const r=Math.cos(i);return(Math.sin(i)*e+r*t)*n+o}return t*n+o}function Q(e,t,r,n,o){const i=r*Math.PI/180;if(i){return(Math.cos(i)*e-Math.sin(i)*t)*n+o}return e*n+o}function Z(e,t,r){return t?r-e:r+e}function _(e,t,r){const n="Color"===r||"TintColor"===r||"ToColor"===r,o="Rotation"===r||"Angle"===r||"ToRotation"===r;let i=t[V(r)];if(null!=i&&(n?i=[i[0]/255,i[1]/255,i[2]/255,i[3]/255]:o&&(i*=Math.PI/180)),null==i&&(i=D(t.type,r.toLowerCase()),null!=i&&(n?i=[i[0]/255,i[1]/255,i[2]/255,i[3]]:o&&(i*=Math.PI/180))),null!=t.primitiveName){const a=e[t.primitiveName];if(null!=a){const e=a[r];null==e||("string"==typeof e||"number"==typeof e||Array.isArray(e)?(i=e,null!=i&&(n?i=[i[0]/255,i[1]/255,i[2]/255,i[3]/255]:o&&(i*=Math.PI/180))):(i={valueExpressionInfo:e,defaultValue:i},null!=i&&(n?i={type:"Process",op:"ArcadeColor",value:i}:o&&(i={type:"Process",op:"Divide",left:i,right:180/Math.PI}))))}}if(null==i)throw new Error(`Failed to derive a value or an expression for "${r}".`);return i}function ee(e,t,r){if(null!=t[V(r)])return!0;if(null!=t.primitiveName){const n=e[t.primitiveName];if(null!=n){if(null!=n[r])return!0}}return!1}function te(e,t){return Math.max(Math.min((e??t)/100,1),0)}function re(e){return e.type.startsWith("Private")}function ne(e){return null!=e&&oe(e)?e:void 0}function oe(e){return"setControlPoint"in e&&"getControlPoint"in e&&"setControlPointAt"in e&&"getControlPointAt"in e}export{u as adjustTextCase,l as analyzeTextParts,O as applyParentTransform,ne as asCIMGeometryCursor,s as assignTextValuesFromFeature,N as attributesToFields,o as colorToArray,n as evaluateValueOrFunction,w as fromCIMFontDecoration,P as fromCIMFontStyle,T as fromCIMHorizontalAlignment,v as fromCIMVerticalAlignment,D as getDefaultCIMValue,U as getEffectsInflateSize,d as getEnum,Y as getFieldName,L as getFillColor,S as getFontStyle,g as getFontWeight,x as getMaxStrokeWidth,b as getNumericValue,_ as getProcessParam,te as getRelativeGradientSize,X as getSize,G as getStrokeColor,A as getStrokeWidth,B as getTextCasing,c as getTextValuesFromFeatureHandle,k as getTintColor,p as getValue,ee as hasProcessParam,E as hasStrokeLayer,h as isCIMFill,m as isCIMMarker,I as isCIMMarkerStrokePlacement,C as isCIMStroke,r as isFeatureValueFn,re as isPrivateGeometricEffect,F as isSVGImage,R as isValidCIMValue,z as mapCIMSymbolToGeometryType,M as normalizeAlpha,q as normalizeDashEffectTemplate,j as normalizeDashTemplate,H as normalizePrimitiveOverrideProps,W as parseDashTemplate,f as resampleHermite,y as toCIMSymbolJSON,J as toLowerCaseProps,V as uncapitalize};
|
|
2
|
+
import{defaultCIMValues as e,defaultCIMColor as t}from"./defaultCIMValues.js";function r(e){return"function"==typeof e}function n(e,t,n,o){return r(e)?e(t,n,o):e}function o(e){return[e.r,e.g,e.b,e.a]}const a=" /-,\n";function i(e){let t=e.length;for(;t--;)if(!a.includes(e.charAt(t)))return!1;return!0}function l(e,t){const r=[];let n=0,o=-1;do{if(o=e.indexOf("[",n),o>=n){if(o>n){const t=e.slice(n,o);r.push([t,null,i(t)])}if(n=o+1,o=e.indexOf("]",n),o>=n){if(o>n){const a=t[e.slice(n,o)];a&&r.push([null,a,!1])}n=o+1}}}while(-1!==o);if(n<e.length){const t=e.slice(n);r.push([t,null,i(t)])}return r}function c(e,t,r){let n="",o=null;for(const a of t){const[t,r,i]=a;if(null!=t&&""!==t)i?o=t:(null!=o&&(n+=o,o=null),n+=t);else{const t=e.readAttribute(r);null!=t&&""!==t&&(null!==o&&(n+=o,o=null),n+=t)}}return u(n,r)}function s(e,t,r,n){let o="",a=null;for(const i of t){const[t,n,l]=i;if(null!=t&&""!==t)l?a=t:(null!=a&&(o+=a,a=null),o+=t);else{let t=n;null!=r&&(t=j(n,r));const i=e.attributes[t];null!=i&&""!==i&&(null!=a&&(o+=a,a=null),o+=i)}}return u(o,n)}function u(e,t){switch("string"!=typeof e&&(e=String(e)),t){case"LowerCase":return e.toLowerCase();case"Allcaps":return e.toUpperCase();default:return e}}function f(e,t,r,n,o,a,i=!0){const l=t/o,c=r/a,s=Math.ceil(l/2),u=Math.ceil(c/2);for(let f=0;f<a;f++)for(let r=0;r<o;r++){const M=4*(r+(i?a-f-1:f)*o);let y=0,C=0,m=0,h=0,I=0,b=0,p=0;const d=(f+.5)*c;for(let n=Math.floor(f*c);n<(f+1)*c;n++){const o=Math.abs(d-(n+.5))/u,a=(r+.5)*l,i=o*o;for(let c=Math.floor(r*l);c<(r+1)*l;c++){let r=Math.abs(a-(c+.5))/s;const o=Math.sqrt(i+r*r);o>=-1&&o<=1&&(y=2*o*o*o-3*o*o+1,y>0&&(r=4*(c+n*t),p+=y*e[r+3],m+=y,e[r+3]<255&&(y=y*e[r+3]/250),h+=y*e[r],I+=y*e[r+1],b+=y*e[r+2],C+=y))}}n[M]=h/C,n[M+1]=I/C,n[M+2]=b/C,n[M+3]=p/m}}function M(e){return e?[e[0],e[1],e[2],e[3]/255]:[0,0,0,0]}function y(e){return e.data?.symbol??null}function C(e){return"CIMVectorMarker"===e.type||"CIMPictureMarker"===e.type||"CIMBarChartMarker"===e.type||"CIMCharacterMarker"===e.type||"CIMPieChartMarker"===e.type||"CIMStackedBarChartMarker"===e.type}function m(e){return"CIMGradientStroke"===e.type||"CIMPictureStroke"===e.type||"CIMSolidStroke"===e.type}function h(e){return null!=e&&("CIMGradientFill"===e.type||"CIMHatchFill"===e.type||"CIMPictureFill"===e.type||"CIMSolidFill"===e.type||"CIMWaterFill"===e.type)}function I(e){return null!=e&&("CIMMarkerPlacementAlongLineRandomSize"===e.type||"CIMMarkerPlacementAlongLineSameSize"===e.type||"CIMMarkerPlacementAlongLineVariableSize"===e.type||"CIMMarkerPlacementAtExtremities"===e.type||"CIMMarkerPlacementAtMeasuredUnits"===e.type||"CIMMarkerPlacementAtRatioPositions"===e.type||"CIMMarkerPlacementOnLine"===e.type||"CIMMarkerPlacementOnVertices"===e.type)}const b=(e,t=0)=>null==e||isNaN(e)?t:e,p=(e,t)=>null!=e?e:t,d=(e,t)=>e??t,k=e=>e.tintColor?M(e.tintColor):[255,255,255,1];function S(e){if(!e)return"normal";switch(e.toLowerCase()){case"italic":return"italic";case"oblique":return"oblique";default:return"normal"}}function P(e){if(!e)return"normal";switch(e.toLowerCase()){case"bold":return"bold";case"bolder":return"bolder";case"lighter":return"lighter";default:return"normal"}}function g(e){return e.underline?"underline":e.strikethrough?"line-through":"none"}function w(e){if(!e)return null;switch(e.type){case"CIMPolygonSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=w(t);if(null!=e)return e}break;case"CIMTextSymbol":return w(e.symbol);case"CIMSolidFill":return e.color}return null}function L(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":{const t=e.symbolLayers;if(t)for(const e of t){const t=L(e);if(null!=t)return t}break}case"CIMTextSymbol":return L(e.symbol);case"CIMSolidStroke":return e.color}}function G(e){for(const t of e)if(t.enable)switch(t.type){case"CIMSolidStroke":case"CIMGradientStroke":case"CIMPictureStroke":return!0}return!1}function E(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=E(t);if(void 0!==e)return e}break;case"CIMTextSymbol":return E(e.symbol);case"CIMSolidStroke":case"CIMGradientStroke":case"CIMPictureStroke":return e.width}}function A(t){let r=0;for(const n of t??[])!1!==n.enable&&m(n)&&(r=Math.max(r,b(n.width,e[n.type].width)));return r}function x(e){switch(e){case"Left":default:return"left";case"Right":return"right";case"Center":return"center";case"Justify":return"justify"}}function v(e){switch(e){default:case"Bottom":return"bottom";case"Top":return"top";case"Center":return"middle";case"Baseline":return"baseline"}}function T(e){return(e?Object.keys(e):[]).map(t=>({name:t,alias:t,type:"string"==typeof e[t]?"esriFieldTypeString":"esriFieldTypeDouble"}))}const N=e=>e.includes("data:image/svg+xml");function F(e){if(!e)return null;switch(e.type){case"CIMPointSymbol":case"CIMTextSymbol":return"esriGeometryPoint";case"CIMLineSymbol":return"esriGeometryPolyline";case"CIMPolygonSymbol":return"esriGeometryPolygon";default:return null}}function z(e){return e?e.charAt(0).toLowerCase()+e.slice(1):e}function V(e,t,r,n,o,a,i=!0){const{infos:l}=a;let c=1,s=0,u=0,f=0,M=1;for(const{absoluteAnchorPoint:m,offsetX:h,offsetY:I,rotation:b,size:p,frameHeight:d,rotateClockWise:k,scaleSymbolsProportionally:S}of l){M=m?1:c;u=J(h,I,s,M,u),f=H(h,I,s,M,f),d&&(S||i)&&(c*=p/d),s=U(b,k,s)}const y=J(n,o,s,M,u),C=H(n,o,s,M,f);return{size:e*c,rotation:U(t,r,s),offsetX:y,offsetY:C}}function O(e){if(null==e)return!1;if(Array.isArray(e))return e.every(e=>O(e));switch(typeof e){case"string":return!!e;case"number":return!isNaN(e)}}function R(r,n){if("color"===n||"outlinecolor"===n||"backgroundcolor"===n||"borderlinecolor"===n||"tintcolor"===n)return[...t[n]];const o=e[r];if(!o)throw new Error(`InternalError: default value for type ${r}.`);return o[n]}function D(e){if(null==e)return"Normal";switch(e.type){case"CIMTextSymbol":return e.textCase??"Normal";case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const t=e.symbolLayers;if(!t)return"Normal";for(const e of t)if("CIMVectorMarker"===e.type)return D(e)}break;case"CIMVectorMarker":{const t=e.markerGraphics;if(!t)return"Normal";for(const e of t)if(e.symbol)return D(e.symbol)}}return"Normal"}function W(t){if(t)switch(t.type){case"CIMTextSymbol":return t.height;case"CIMPointSymbol":{let r=0;if(t.symbolLayers)for(const n of t.symbolLayers)if(n)switch(n.type){case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":case"CIMObjectMarker3D":case"CIMglTFMarker3D":{const t=n.size??e.CIMVectorMarker.size;t>r&&(r=t);break}}return r}case"CIMLineSymbol":case"CIMPolygonSymbol":{let r=0;if(t.symbolLayers)for(const n of t.symbolLayers)if(n)switch(n.type){case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":{const e=n.width;null!=e&&e>r&&(r=e);break}case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":case"CIMObjectMarker3D":case"CIMglTFMarker3D":if(n.markerPlacement&&I(n.markerPlacement)){const t=n.size??e.CIMVectorMarker.size;t>r&&(r=t)}break;case"CIMPictureFill":{const e=n.height;null!=e&&e>r&&(r=e)}}return r}}}function j(e,t){if(null!==t){const r=t.get(e);return r?r.name:e}return e}function B(e){return e.map(e=>({...e,propertyName:z(e.propertyName)}))}function q(e){const t={};for(const r in e){const n=e[r];t[z(r)]=n}return t}function X(e){if(!e)return 0;let t=0;for(const r of e)t+=Y(r);return t}function Y(e){if(!e)return 0;if(Z(e))return e.inflateSize??256;switch(e.type){case"CIMGeometricEffectArrow":return Math.abs(.5*e.width);case"CIMGeometricEffectBuffer":return Math.abs(e.size);case"CIMGeometricEffectCircularSector":return Math.abs(e.radius??25);case"CIMGeometricEffectControlMeasureLine":return 500;case"CIMGeometricEffectExtension":return Math.abs(e.length);case"CIMGeometricEffectJog":return Math.abs(.5*e.length);case"CIMGeometricEffectMove":return Math.max(Math.abs(b(e.offsetX)),Math.abs(b(e.offsetY)));case"CIMGeometricEffectOffset":case"CIMGeometricEffectOffsetTangent":return Math.abs(e.offset);case"CIMGeometricEffectRadial":return Math.abs(e.length??5);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);case"CIMGeometricEffectDonut":return Math.abs(e.width)}}function H(e,t,r,n,o){const a=r*Math.PI/180;if(a){const r=Math.cos(a);return(Math.sin(a)*e+r*t)*n+o}return t*n+o}function J(e,t,r,n,o){const a=r*Math.PI/180;if(a){return(Math.cos(a)*e-Math.sin(a)*t)*n+o}return e*n+o}function U(e,t,r){return t?r-e:r+e}function $(e,t,r){const n="Color"===r||"TintColor"===r||"ToColor"===r,o="Rotation"===r||"Angle"===r||"ToRotation"===r;let a=t[z(r)];if(null!=a&&(n?a=[a[0]/255,a[1]/255,a[2]/255,a[3]/255]:o&&(a*=Math.PI/180)),null==a&&(a=R(t.type,r.toLowerCase()),null!=a&&(n?a=[a[0]/255,a[1]/255,a[2]/255,a[3]]:o&&(a*=Math.PI/180))),null!=t.primitiveName){const i=e[t.primitiveName];if(null!=i){const e=i[r];null==e||("string"==typeof e||"number"==typeof e||Array.isArray(e)?(a=e,null!=a&&(n?a=[a[0]/255,a[1]/255,a[2]/255,a[3]/255]:o&&(a*=Math.PI/180))):(a={valueExpressionInfo:e,defaultValue:a},null!=a&&(n?a={type:"Process",op:"ArcadeColor",value:a}:o&&(a={type:"Process",op:"Divide",left:a,right:180/Math.PI}))))}}if(null==a)throw new Error(`Failed to derive a value or an expression for "${r}".`);return a}function K(e,t,r){if(null!=t[z(r)])return!0;if(null!=t.primitiveName){const n=e[t.primitiveName];if(null!=n){if(null!=n[r])return!0}}return!1}function Q(e,t){return Math.max(Math.min((e??t)/100,1),0)}function Z(e){return e.type.startsWith("Private")}function _(e){return null!=e&&ee(e)?e:void 0}function ee(e){return"setControlPoint"in e&&"getControlPoint"in e&&"setControlPointAt"in e&&"getControlPointAt"in e}export{u as adjustTextCase,l as analyzeTextParts,V as applyParentTransform,_ as asCIMGeometryCursor,s as assignTextValuesFromFeature,T as attributesToFields,o as colorToArray,n as evaluateValueOrFunction,g as fromCIMFontDecoration,x as fromCIMHorizontalAlignment,v as fromCIMVerticalAlignment,R as getDefaultCIMValue,X as getEffectsInflateSize,d as getEnum,j as getFieldName,w as getFillColor,S as getFontStyle,P as getFontWeight,A as getMaxStrokeWidth,b as getNumericValue,$ as getProcessParam,Q as getRelativeGradientSize,W as getSize,L as getStrokeColor,E as getStrokeWidth,D as getTextCasing,c as getTextValuesFromFeatureHandle,k as getTintColor,p as getValue,K as hasProcessParam,G as hasStrokeLayer,h as isCIMFill,C as isCIMMarker,I as isCIMMarkerStrokePlacement,m as isCIMStroke,r as isFeatureValueFn,Z as isPrivateGeometricEffect,N as isSVGImage,O as isValidCIMValue,F as mapCIMSymbolToGeometryType,M as normalizeAlpha,B as normalizePrimitiveOverrideProps,f as resampleHermite,y as toCIMSymbolJSON,q as toLowerCaseProps,z as uncapitalize};
|
|
@@ -2,12 +2,18 @@ import type { ClonableMixin } from "../../core/Clonable.js";
|
|
|
2
2
|
import type { JSONSupport } from "../../core/JSONSupport.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* LinePattern3D is the base class for patterns on [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/LineSymbol3DLayer/)
|
|
6
|
-
* outlines on [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/FillSymbol3DLayer/).
|
|
5
|
+
* LinePattern3D is the base class for patterns on [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/LineSymbol3DLayer/)
|
|
6
|
+
* and outlines on [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/FillSymbol3DLayer/).
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* There are two types of patterns called style and template. [LineStylePattern3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/patterns/LineStylePattern3D/) is supported on
|
|
9
|
+
* [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/LineSymbol3DLayer/) and [FillSymbol3DLayer.outline](https://developers.arcgis.com/javascript/latest/references/core/symbols/FillSymbol3DLayer/#outline).
|
|
10
|
+
* [LineTemplatePattern3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/patterns/LineTemplatePattern3D/) applies only to
|
|
11
|
+
* [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/LineSymbol3DLayer/).
|
|
9
12
|
*
|
|
10
13
|
* @since 4.22
|
|
11
14
|
*/
|
|
12
|
-
export default abstract class LinePattern3D extends LinePattern3DSuperclass {
|
|
15
|
+
export default abstract class LinePattern3D extends LinePattern3DSuperclass {
|
|
16
|
+
/** The LinePattern3D type. */
|
|
17
|
+
get type(): "style" | "template";
|
|
18
|
+
}
|
|
13
19
|
declare const LinePattern3DSuperclass: typeof JSONSupport & typeof ClonableMixin
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{__decorate as r}from"tslib";import{ClonableMixin as
|
|
2
|
+
import{__decorate as r}from"tslib";import{ClonableMixin as e}from"../../core/Clonable.js";import{JSONSupport as o}from"../../core/JSONSupport.js";import{property as t,subclass as s}from"../../core/accessorSupport/decorators.js";let p=class extends(e(o)){constructor(r){super(r)}};r([t({type:["style","template","image"],readOnly:!0,json:{read:!0,write:{ignoreOrigin:!0}}})],p.prototype,"type",void 0),p=r([s("esri.symbols.patterns.LinePattern3D")],p);export{p as default};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type LinePattern3D from "./LinePattern3D.js";
|
|
2
|
+
|
|
3
|
+
/** @since 5.2 */
|
|
4
|
+
export interface LineTemplatePattern3DProperties extends Partial<Pick<LineTemplatePattern3D, "dashTemplate">> {}
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Renders lines using a custom repeating sequence of dashes and gaps.
|
|
8
|
+
*
|
|
9
|
+
* @since 5.2
|
|
10
|
+
* @see [LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/LineSymbol3DLayer/)
|
|
11
|
+
* @example
|
|
12
|
+
* ```js
|
|
13
|
+
* const symbol = {
|
|
14
|
+
* type: "line-3d", // autocasts as new LineSymbol3D()
|
|
15
|
+
* symbolLayers: [{
|
|
16
|
+
* type: "line", // autocasts as new LineSymbol3DLayer()
|
|
17
|
+
* size: 4,
|
|
18
|
+
* material: { color: "red" },
|
|
19
|
+
* pattern: {
|
|
20
|
+
* type: "template", // autocasts as new LineTemplatePattern3D()
|
|
21
|
+
* dashTemplate: [10, 6, 2, 6] // lengths relative to the line width
|
|
22
|
+
* }
|
|
23
|
+
* }]
|
|
24
|
+
* };
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export default class LineTemplatePattern3D extends LinePattern3D {
|
|
28
|
+
constructor(properties?: LineTemplatePattern3DProperties);
|
|
29
|
+
/**
|
|
30
|
+
* The custom dash and gap lengths.
|
|
31
|
+
*
|
|
32
|
+
* Values alternate between visible dash lengths and transparent gap lengths, starting with a dash.
|
|
33
|
+
* Each value is a multiple of the [line width](https://developers.arcgis.com/javascript/latest/references/core/symbols/LineSymbol3DLayer/#size). For instance, a value of `1` equals one
|
|
34
|
+
* line width.
|
|
35
|
+
*
|
|
36
|
+
* In case an odd number of values is provided, the sequence is repeated to form a complete dash-gap cycle.
|
|
37
|
+
* Decimals are supported and negative values are converted to their absolute values.
|
|
38
|
+
*
|
|
39
|
+
* @since 5.2
|
|
40
|
+
*/
|
|
41
|
+
accessor dashTemplate: number[];
|
|
42
|
+
/**
|
|
43
|
+
* The pattern type.
|
|
44
|
+
*
|
|
45
|
+
* @since 5.2
|
|
46
|
+
*/
|
|
47
|
+
get type(): "template";
|
|
48
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
+
import{__decorate as e}from"tslib";import{property as t,subclass as s}from"../../core/accessorSupport/decorators.js";import{normalizeDashPatternTemplate as a}from"../cim/dashUtils.js";import o from"./LinePattern3D.js";let p=class extends o{constructor(e){super(e),this.type="template",this.dashTemplate=[]}get normalizedDashTemplate(){const{dashTemplate:e,hidesLine:t}=a(this.dashTemplate);return{dashTemplate:e.map(e=>Math.abs(e)),hidesLine:t}}};e([t({type:["template"]})],p.prototype,"type",void 0),e([t({type:[Number],nonNullable:!0})],p.prototype,"dashTemplate",void 0),e([t()],p.prototype,"normalizedDashTemplate",null),p=e([s("esri.symbols.patterns.LineTemplatePattern3D")],p);const r=p;export{r as default};
|