@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 2.77 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{_ as t,a as e}from"../../../../../../../chunks/tslib.es6.js";import{location as i,input as s}from"../../GraphShaderModule.js";import{dot as o,Vec2 as n,Vec4 as l,Float as r,Mat3 as a,mix as m,length as d,clamp as p,Vec3 as u,step as c,min as y}from"../../graph/glsl.js";import{AAnimatedPolyShader as h,PolyHittestVertexInput as x,PolyVertexInput as v,PolyFragmentInput as f}from"./AAnimatedPolyShader.js";import{getValue as w}from"./AAnimatedShader.js";import{AnimationParamIndex as S}from"./enums.js";import{distPointSegment as b}from"../shaders/hittestUtils.js";import{getLineThinFactor as P}from"../shaders/LineShader.js";class g extends v{}t([i(10,r)],g.prototype,"accumulatedDistance",void 0),t([i(11,n)],g.prototype,"normal",void 0),t([i(12,n)],g.prototype,"segmentDirection",void 0);class z extends f{}class A extends h{constructor(){super(...arguments),this.type="AnimatedLineShader",this.computeAttributes={pos:["nextPos1","nextPos2"]}}vertex(t,e){const{animationPointerAndBaseSizeAndReferenceSize:i}=t,s=i.xy,{distanceToPx:d,ndc:p,z:u,color:c,isOutline:y,strokeWidth:h,isSDF:x,baseSize:v,scale:f,scaleSymbolsProportionally:b,evalParams:P}=this._vertexPoly(t),g=t.sizing.xy,z=g.x.multiply(v).divide(g.y),A=w(s,S.shift,P).a,j=t.accumulatedDistance.subtract(A),{normal:D}=t,M=t.normal.y,F=j.divide(this.view.displayZoomFactor).add(o(t.segmentDirection,t.offset)).divide(z),R=M.add(1).divide(2),T=new n(F,R),W=t.tlbr.divide(this.mosaicInfo.size.xyxy);return{glPosition:new l(p,u,1),tlbr:W,uv:T,color:c.multiply(new r(1).subtract(y)),outlineColor:c.multiply(y),distanceToPx:d,strokeWidth:h.multiply(m(new r(1),f,b)),isOutline:y,isSDF:x,halfWidth:v.divide(2),normal:D,...this.maybeRunHittest(t,e,{pos:t.pos,size:v,sizeCorrection:new r(1),isMapAligned:new r(1),vvRotationMat3:new a(1,0,0,0,1,0,0,0,1),placementMat3:new a(1,0,0,0,1,0,0,0,1),outlineSize:new r(1),distanceToPx:d,isSDF:x})}}fragment(t){const e=this._fragmentPoly(t),{halfWidth:i,normal:s}=t,o=P(i),n=d(s).multiply(i),l=p(o.multiply(i.subtract(n)).divide(o.subtract(new r(1))),new r(0),new r(1));return this.getFragmentOutput(e.multiply(l),t)}hittest(t,e,i){const{viewMat3:s,tileMat3:o}=this.view,n=s.multiply(o),l=n.multiply(new u(t.pos,1)),r=n.multiply(new u(e.nextPos1,1)),a=n.multiply(new u(e.nextPos2,1)),{distance:m,smallSymbolDistance:d,smallSymbolSizeThreshold:p}=this.hittestRequest,h=c(i,p.multiply(.5)).multiply(m.subtract(d)),x=this.hittestRequest.position;return y(b(x,l.xy,r.xy),b(x,l.xy,a.xy)).subtract(i).add(h)}}t([e(0,s(g)),e(1,s(x))],A.prototype,"vertex",null),t([e(0,s(z))],A.prototype,"fragment",null);export{A as AnimatedLineShader};