@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 5.2 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{clone as e}from"../../../core/lang.js";import r from"../../../symbols/CIMSymbol.js";import{PlacementPolygonCenterMethod as n}from"../../../symbols/cim/enums.js";var t;function o(e){const{view:r,field:n,normalizationField:o,sizeStops:i,sizeByScaleEnabled:a}=e,{value:l,size:s}=i[0],{value:c,size:m}=i[1];let y,u=0;n&&(u=`$feature["${n}"]`,y=`\n if(!HasValue($feature, "${n}")){\n return 0;\n }\n $feature["${n}"];\n `),o&&(u=`$feature["${n}"] / $feature["${o}"]`,y=`if(!HasValue($feature, "${n}") || !HasValue($feature, "${o}") || $feature["${o}"] <= 0){\n return 0;\n }\n $feature["${n}"];\n $feature["${o}"];`);const p={type:"CIMExpressionInfo",title:"Size in pixels of outer ring",expression:a?`\n ${y}\n var maxSize = ${m};\n var referenceScale = ${r.scale};\n return (maxSize * (referenceScale / $view.scale));\n `:`${y}\n return ${m}`,returnType:"Default"},f={type:"CIMExpressionInfo",title:"Size in pixels of inner ring",expression:`\n ${y}\n var value = ${u};\n\n var referenceScale = ${r.scale};\n var referenceScaleRatio = ${a?"(referenceScale / $view.scale)":1};\n var maxSize = ${m} * referenceScaleRatio;\n var minSize = ${s} * referenceScaleRatio;\n\n var minDataValue = ${l};\n var maxDataValue = ${c};\n\n var ratio = Constrain(( value - minDataValue ) / ( maxDataValue - minDataValue ), 0, 1);\n\n var innerDotSize = Constrain(maxSize * ratio, minSize, maxSize);\n return innerDotSize;\n `,returnType:"Default"};return[{type:"CIMPrimitiveOverride",primitiveName:t.OuterRing,propertyName:"Size",valueExpressionInfo:p},{type:"CIMPrimitiveOverride",primitiveName:t.InnerDot,propertyName:"Size",valueExpressionInfo:f}]}function i(e){switch(e){case"circle":return{rings:[[[8.5,.2],[7.06,.33],[5.66,.7],[4.35,1.31],[3.16,2.14],[2.14,3.16],[1.31,4.35],[.7,5.66],[.33,7.06],[.2,8.5],[.33,9.94],[.7,11.34],[1.31,12.65],[2.14,13.84],[3.16,14.86],[4.35,15.69],[5.66,16.3],[7.06,16.67],[8.5,16.8],[9.94,16.67],[11.34,16.3],[12.65,15.69],[13.84,14.86],[14.86,13.84],[15.69,12.65],[16.3,11.34],[16.67,9.94],[16.8,8.5],[16.67,7.06],[16.3,5.66],[15.69,4.35],[14.86,3.16],[13.84,2.14],[12.65,1.31],[11.34,.7],[9.94,.33],[8.5,.2]]]};case"square":return{rings:[[[.5,.5],[.5,16.5],[16.5,16.5],[16.5,.5],[.5,.5]]]};case"diamond":return{rings:[[[8.5,.5],[.2,8.5],[8.5,16.5],[16.5,8.5],[8.5,.5]]]};case"hexagon-pointy":return{rings:[[[15.86,12.75],[15.86,4.25],[8.5,0],[1.14,4.25],[1.14,12.75],[8.5,17],[15.86,12.75]]]};case"hexagon-flat":return{rings:[[[12.75,15.86],[17,8.5],[12.75,1.14],[4.25,1.14],[0,8.5],[4.25,15.86],[12.75,15.86]]]}}}function a(e){const{type:r,color:o,colorLocked:a}=e;return{type:"CIMVectorMarker",enable:!0,colorLocked:!1,anchorPoint:{x:0,y:0},anchorPointUnits:"Relative",primitiveName:t.OuterRing,frame:{xmin:0,ymin:0,xmax:17,ymax:17},markerGraphics:[{type:"CIMMarkerGraphic",geometry:i(r),symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:o.toArray(),colorLocked:!!a,effects:[{type:"CIMGeometricEffectDonut",width:.75}]}]}}],scaleSymbolsProportionally:!1,respectFrame:!0,markerPlacement:{type:"CIMMarkerPlacementPolygonCenter",placePerPart:!1,method:n.OnPolygon,offsetX:0,offsetY:0,clipAtBoundary:!1},size:20}}function l(e){const{type:r,color:o}=e;return{type:"CIMVectorMarker",enable:!0,anchorPoint:{x:0,y:0},anchorPointUnits:"Relative",primitiveName:t.InnerDot,frame:{xmin:0,ymin:0,xmax:17,ymax:17},markerGraphics:[{type:"CIMMarkerGraphic",geometry:i(r),symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:o.toArray()}]}}],scaleSymbolsProportionally:!0,respectFrame:!0,markerPlacement:{type:"CIMMarkerPlacementPolygonCenter",placePerPart:!1,method:n.OnPolygon,offsetX:0,offsetY:0,clipAtBoundary:!1},size:10}}function s(e){const{primitiveOverrides:n}=e;return new r({data:{type:"CIMSymbolReference",symbol:{type:"CIMPolygonSymbol",symbolLayers:[a(e),l(e)]},primitiveOverrides:n}})}function c(e){return"CIMVectorMarker"===e?.type?e.markerGraphics?.[0]:void 0}function m(e){return"CIMPolygonSymbol"===e?.symbol?.type?e.symbol.symbolLayers?.[0]:void 0}function y(e,r){"CIMVectorMarker"===e?.type&&null!=r&&(e.size=r)}function u(e,r){const n=c(e);n&&null!=r&&(n.geometry=i(r))}function p(e,r){const n=m(c(e));n&&null!=r&&(n.color=r.toArray())}function f(e,r,n){const t=m(c(e));t&&null!=r&&n&&(t.colorLocked=r)}function v(r,n){const{outerRingSize:o,innerDotSize:i,type:a,color:l,colorLocked:s,primitiveOverrides:c}=n,m="CIMPolygonSymbol"===r.data.symbol?.type?r.data.symbol.symbolLayers:null;if(2===m?.length)for(const e of m){const r=e.primitiveName===t.OuterRing;y(e,r?o:i),u(e,a),p(e,l),f(e,s,r)}return null!=o&&null!=i&&(r.data.primitiveOverrides=null),void 0!==c&&(r.data.primitiveOverrides=e(c)),r}!function(e){e.OuterRing="reference-size-outer-ring",e.InnerDot="reference-size-inner-dot"}(t||(t={}));export{o as createPrimitiveOverrides,s as createReferenceSizeSymbol,v as updateReferenceSizeSymbol};