UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 3.48 kB
import has from"../../../../../../core/has.js";import{createResolver as e}from"../../../../../../core/promiseUtils.js";import{brushes as t}from"../../../../engine/brushes.js";import{FeatureContainer as s}from"../../../../engine/FeatureContainer.js";import{WGLDrawPhase as i}from"../../../../engine/webgl/enums.js";const r=has("featurelayer-order-by-server-enabled");class a extends s{constructor(e,t,s,i){super(e),this._hitTestsRequests=[],this._layer=s,this._layerView=t,this._onUpdate=i}renderChildren(e){if(this.attributeView.update(),this.hasAnimation){e.painter.effects.integrate.draw(e,e.attributeView)}super.renderChildren(e)}hasEmptyAttributeView(){return this.attributeView.isEmpty()}isUpdating(){return this.attributeView.isUpdating()}hitTest(t){let s=this._hitTestsRequests.find((({x:e,y:s})=>e===t.x&&s===t.y));const i=e();return s?s.resolvers.push(i):(s={x:t.x,y:t.y,resolvers:[i]},this._hitTestsRequests.push(s)),this.requestRender(),i.promise}onTileData(e,t){const s=r&&"orderBy"in this._layer&&this._layer.orderBy,i=s&&s?.length&&!s[0].valueExpression&&s[0].field,a=!!s&&this._layerView.orderByFields===i;e.patch(t,a),this.contains(e)||this.addChild(e),this.requestRender()}onTileError(e){this.contains(e)||this.addChild(e)}updateTransitionProperties(e,t){super.updateTransitionProperties(e,t),this._layerView.featureEffectView.transitionStep(e,t),this._layerView.featureEffectView.transitioning&&this.requestRender()}doRender(e){const{minScale:t,maxScale:s}=this._layer.effectiveScaleRange,i=e.state.scale;i<=(t||1/0)&&i>=s&&super.doRender(e)}afterRender(e){super.afterRender(e),this._hitTestsRequests.length&&this.requestRender()}onAttributeStoreUpdate(){this.hasLabels&&this._layerView.view.labelManager.requestUpdate(),this._onUpdate()}get hasAnimation(){return this.hasLabels}setStencilReference(e){const{rendererSchema:t}=e.rendererInfo;if("dot-density"===t?.type&&t?.dotSize>1||"heatmap"===t?.type){const e=1;for(const t of this.children)t.stencilRef=t.key.level+e}else super.setStencilReference(e)}get hasLabels(){if("sublayers"in this._layer)return this._layer.sublayers.some((e=>!!e.labelingInfo?.length&&e.labelsVisible));const e=this._layer.featureReduction,t=e&&"labelingInfo"in e&&e.labelsVisible&&e.labelingInfo&&e.labelingInfo.length;return this._layer.labelingInfo&&this._layer.labelingInfo.length&&this._layer.labelsVisible||!!t}prepareRenderPasses(e){const s=e.registerRenderPass({name:"label",brushes:[t.label],target:()=>this.hasLabels?this.children:null,drawPhase:i.LABEL|i.LABEL_ALPHA}),r=e.registerRenderPass({name:"geometry",brushes:[t.fill,t.dotDensity,t.line,t.marker,t.heatmap,t.pieChart,t.text],target:()=>this.children,enableDefaultDraw:()=>!this._layerView.featureEffectView.hasEffects,effects:[{apply:e.effects.outsideEffect,enable:()=>this._layerView.featureEffectView.hasEffects,args:()=>this._layerView.featureEffectView.excludedEffects},{apply:e.effects.insideEffect,enable:()=>this._layerView.featureEffectView.hasEffects,args:()=>this._layerView.featureEffectView.includedEffects},{apply:e.effects.hittest,enable:()=>!!this._hitTestsRequests.length,args:()=>this._hitTestsRequests}]}),a=e.registerRenderPass({name:"highlight",brushes:[t.fill,t.dotDensity,t.line,t.marker,t.pieChart,t.text],target:()=>this.children,drawPhase:i.HIGHLIGHT,enableDefaultDraw:()=>!1,effects:[{apply:e.effects.highlight,enable:()=>!!this._layerView.hasHighlight()}]});return[...super.prepareRenderPasses(e),r,a,s]}}export{a as WGLFeatureView};