12345 |
- /*
- All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- See https://js.arcgis.com/4.24/esri/copyright.txt for details.
- */
- import{SymbolHelper as e,slsDashToTemplateArray as t,CIMSymbolHelper as r}from"./CIMSymbolHelper.js";import a from"./Rect.js";import{getSDFInfo as i,buildSDF as n}from"./SDFHelper.js";import{resampleHermite as s}from"./utils.js";const o=512;class m{constructor(e){this._resourceManager=e}dispose(){this._rasterizationCanvas=null}rasterizeJSONResource(s,o,m){if(this._rasterizationCanvas||(this._rasterizationCanvas=document.createElement("canvas")),"simple-fill"===s.type||"esriSFS"===s.type){const[t,r,a]=e.rasterizeSimpleFill(this._rasterizationCanvas,s.style,o);return{size:[r,a],image:new Uint32Array(t.buffer),sdf:!1,simplePattern:!0,anchorX:0,anchorY:0}}if("simple-line"===s.type||"esriSLS"===s.type||"line"===s.type&&s.dashTemplate){let r,a;if("simple-line"===s.type||"esriSLS"===s.type)switch(r=t(s.style,s.cap),s.cap){case"butt":a="Butt";break;case"square":a="Square";break;default:a="Round"}else r=s.dashTemplate,a=s.cim.capStyle;const[i,n,o]=e.rasterizeSimpleLine(r,a);return{size:[n,o],image:new Uint32Array(i.buffer),sdf:!0,simplePattern:!0,anchorX:0,anchorY:0}}let l,c,f;if("simple-marker"===s.type||"esriSMS"===s.type||"line-marker"===s.type?(l=r.fromSimpleMarker(s),f=i(l)):s.cim&&"CIMHatchFill"===s.cim.type?(l=r.fromCIMHatchFill(s.cim),c=new a(l.frame.xmin,-l.frame.ymax,l.frame.xmax-l.frame.xmin,l.frame.ymax-l.frame.ymin)):s.cim.markerPlacement&&"CIMMarkerPlacementInsidePolygon"===s.cim.markerPlacement.type?(l=r.fromCIMInsidePolygon(s.cim),c=new a(l.frame.xmin,-l.frame.ymax,l.frame.xmax-l.frame.xmin,l.frame.ymax-l.frame.ymin)):(l=s.cim,f=i(l)),f&&!m){const[e,t,r]=n(f);return e?{size:[t,r],image:new Uint32Array(e.buffer),sdf:!0,simplePattern:!0,anchorX:0,anchorY:0}:null}const[p,h,u,y,d]=r.rasterize(this._rasterizationCanvas,l,c,this._resourceManager,!m);return p?{size:[h,u],image:new Uint32Array(p.buffer),sdf:!1,simplePattern:!1,anchorX:y,anchorY:d}:null}rasterizeImageResource(e,t,r,a){this._rasterizationCanvas||(this._rasterizationCanvas=document.createElement("canvas")),this._rasterizationCanvas.width=e,this._rasterizationCanvas.height=t;const i=this._rasterizationCanvas.getContext("2d");r instanceof ImageData?i.putImageData(r,0,0):(r.setAttribute("width",`${e}px`),r.setAttribute("height",`${t}px`),i.drawImage(r,0,0,e,t));const n=i.getImageData(0,0,e,t),m=new Uint8Array(n.data);if(a)for(const s of a)if(s&&s.oldColor&&4===s.oldColor.length&&s.newColor&&4===s.newColor.length){const[e,t,r,a]=s.oldColor,[i,n,o,l]=s.newColor;if(e===i&&t===n&&r===o&&a===l)continue;for(let s=0;s<m.length;s+=4)e===m[s]&&t===m[s+1]&&r===m[s+2]&&a===m[s+3]&&(m[s]=i,m[s+1]=n,m[s+2]=o,m[s+3]=l)}let l;for(let s=0;s<m.length;s+=4)l=m[s+3]/255,m[s]=m[s]*l,m[s+1]=m[s+1]*l,m[s+2]=m[s+2]*l;let c=m,f=e,p=t;const h=o;if(f>=h||p>=h){const r=f/p;r>1?(f=h,p=Math.round(h/r)):(p=h,f=Math.round(h*r)),c=new Uint8Array(4*f*p);const a=new Uint8ClampedArray(c.buffer);s(m,e,t,a,f,p,!1)}return{size:[f,p],image:new Uint32Array(c.buffer),sdf:!1,simplePattern:!1,anchorX:0,anchorY:0}}}export{m as default};
|