UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 6.22 kB
import e from"../../../../core/Error.js";import t from"../../../../core/Logger.js";import{CapType as n,JoinType as r}from"../../../../symbols/cim/enums.js";import{WGLGeometryType as s,WGLSymbologyType as a,VVType as i}from"./enums.js";import{Usage as c,DataType as o,PixelType as u}from"../../../webgl/enums.js";import{VertexElementDescriptor as l}from"../../../webgl/VertexElementDescriptor.js";const m=t.getLogger("esri.views.2d.engine.webgl.Utils"),f="geometry",d=[{name:f,strideInBytes:12}],p=[{name:f,strideInBytes:36}],y=[{name:f,strideInBytes:24}],I=[{name:f,strideInBytes:12}],g=[{name:f,strideInBytes:40}],S=[{name:f,strideInBytes:36}],T=[{name:f,strideInBytes:36}];function w(e){const t={};for(const n of e)t[n.name]=n.strideInBytes;return t}const E=w([{name:f,strideInBytes:36}]),h=w(d),L=w(p),N=w(y),D=w(I),A=w(g),M=w(S),U=w(T);function R(e,t){switch(e){case s.MARKER:return t===a.HEATMAP?h:E;case s.FILL:switch(t){case a.DOT_DENSITY:return D;case a.SIMPLE:case a.OUTLINE_FILL_SIMPLE:return N;default:return L}case s.LINE:return A;case s.TEXT:return M;case s.LABEL:return U}}const _=[f],v=[f],B=[f],O=[f],C=[f];function b(e){switch(e){case s.MARKER:return _;case s.FILL:return v;case s.LINE:return B;case s.TEXT:return O;case s.LABEL:return C}}function F(e){switch(e%4){case 0:case 2:return 4;case 1:case 3:return 1}}function x(e,t){switch(t%4){case 0:case 2:return new Uint32Array(Math.floor(e*t/4));case 1:case 3:return new Uint8Array(e*t)}}function P(e,t){switch(t%4){case 0:case 2:return new Uint32Array(e);case 1:case 3:return new Uint8Array(e)}}function z(e){return null!=e}function $(e){return"number"==typeof e}function k(t){switch(t){case"butt":return n.BUTT;case"round":return n.ROUND;case"square":return n.SQUARE;default:return m.error(new e("mapview-invalid-type",`Cap type ${t} is not a valid option. Defaulting to round`)),n.ROUND}}function G(t){switch(t){case"miter":return r.MITER;case"bevel":return r.BEVEL;case"round":return r.ROUND;default:return m.error(new e("mapview-invalid-type",`Join type ${t} is not a valid option. Defaulting to round`)),r.ROUND}}function V(e){switch(e){case"opacity":return i.OPACITY;case"color":return i.COLOR;case"rotation":return i.ROTATION;case"size":return i.SIZE;default:return m.error(`Cannot interpret unknown vv: ${e}`),null}}function j(e,t,n,r,s,a,i){for(const c in a){const t=a[c].stride,r=F(t),i=a[c].data,o=n[c].data;if(null==i||null==o)continue;const u=t*s.vertexCount/r,l=t*e/r,m=t*s.vertexFrom/r;for(let e=0;e<u;++e)o[e+l]=i[e+m]}if(null!=i&&null!=r){const n=s.indexCount;for(let a=0;a<n;++a)r[a+t]=i[a+s.indexFrom]-s.vertexFrom+e}}const Y={[f]:c.STATIC_DRAW};function H(e,t){const n=[];for(let r=0;r<5;++r){const s=b(r),a={};for(const e of s)a[e]={data:t(r,e)};n.push({data:e(r),buffers:a})}return n}function q(e){switch(e){case o.BYTE:case o.UNSIGNED_BYTE:return 1;case o.SHORT:case o.UNSIGNED_SHORT:return 2;case o.FLOAT:case o.INT:case o.UNSIGNED_INT:return 4}}function K(t){switch(t){case u.UNSIGNED_BYTE:return 1;case u.UNSIGNED_SHORT_4_4_4_4:return 2;case u.FLOAT:return 4;default:return void m.error(new e("webgl-utils",`Unable to handle type ${t}`))}}function W(t){switch(t){case u.UNSIGNED_BYTE:return Uint8Array;case u.UNSIGNED_SHORT_4_4_4_4:return Uint16Array;case u.FLOAT:return Float32Array;default:return void m.error(new e("webgl-utils",`Unable to handle type ${t}`))}}function X(e){const t={};for(const n in e){const r=e[n];let s=0;t[n]=r.map((e=>{const t=new l(e.name,e.count,e.type,s,0,e.normalized||!1);return s+=e.count*q(e.type),t})),t[n]?.forEach((e=>e.stride=s))}return t}const J=e=>{const t=new Map;for(const n in e)for(const r of e[n])t.set(r.name,r.location);return t},Q=e=>{const t={};for(const n in e){const r=e[n];t[n]=r?.length?r[0].stride:0}return t},Z=new Map,ee=(e,t)=>{if(!Z.has(e)){const n=X(t),r={strides:Q(n),bufferLayouts:n,attributes:J(t)};Z.set(e,r)}return Z.get(e)};function te(e){e(s.FILL),e(s.LINE),e(s.MARKER),e(s.TEXT),e(s.LABEL)}const ne=e=>"path"in e&&ye(e.path),re=e=>"url"in e&&e.url||"imageData"in e&&e.imageData,se=e=>"imageData"in e&&e.imageData&&"contentType"in e&&e.contentType?`data:${e.contentType};base64,${e.imageData}`:"url"in e?e.url:null,ae=e=>null!=e&&e.startsWith("data:image/gif"),ie=e=>"url"in e&&e.url&&(e.url.includes(".gif")||ae(e.url))||"contentType"in e&&"image/gif"===e.contentType||"imageData"in e&&ae(e.imageData),ce=e=>null!=e&&e.startsWith("data:image/png"),oe=e=>"url"in e&&e.url&&(e.url.includes(".png")||ce(e.url))||"contentType"in e&&"image/png"===e.contentType||"imageData"in e&&ce(e.imageData),ue=e=>e.type&&e.type.toLowerCase().includes("3d");function le(e){switch(e.type){case"line":{const t=e;return"CIMSolidStroke"===t.cim.type&&!t.dashTemplate}case"fill":return"CIMSolidFill"===e.cim.type;case"esriSFS":return"esriSFSSolid"===e.style||"esriSFSNull"===e.style;case"esriSLS":return"esriSLSSolid"===e.style||"esriSLSNull"===e.style;default:return!1}}const me=e=>e.includes("data:image/svg+xml");function fe(e){switch("cim"in e?e.cim.type:e.type){case"esriSMS":case"esriPMS":case"CIMPointSymbol":return!1;case"CIMVectorMarker":case"CIMCharacterMarker":case"CIMPictureMarker":return Ie(e);default:return!0}}function de(e){const t="maxVVSize"in e&&e.maxVVSize,n="width"in e&&e.width||"size"in e&&e.size||0;return t||n}function pe(e){const t=[];for(let n=0;n<e.length;n++)t.push(e.charCodeAt(n));return t}const ye=e=>!!e&&(e=e.trim(),!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(e)&&/[\dz]$/i.test(e)&&e.length>4)),Ie=e=>"fill"===e.type&&"CIMMarkerPlacementInsidePolygon"===e?.cim?.markerPlacement?.type;export{Y as C_VBO_INFO,x as allocateTypedArrayBuffer,P as allocateTypedArrayBufferwithData,pe as charCodes,j as copyMeshData,H as createGeometryData,ee as createProgramDescriptor,te as forEachGeometryType,q as getBytes,k as getCapType,G as getJoinType,b as getNamedBuffers,de as getPMSResourceSize,W as getPixelArrayCtor,K as getPixelBytes,R as getStrides,se as getUrl,V as getVVType,ue as is3D,z as isDefined,ie as isGIF,ae as isGIFDataUri,re as isImageResource,Ie as isMarkerPlacementInsidePolygon,$ as isNumber,oe as isPNG,ce as isPNGDataUri,me as isSVGImage,ne as isSVGResource,le as isSimple,ye as isValidSVG,fe as shouldRepeat,F as strideToPackingFactor};