UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 5.74 kB
import{_ as e}from"../../../../chunks/tslib.es6.js";import i from"../../../../Color.js";import"../../../../intl.js";import s from"../../../../core/Accessor.js";import{makeHandle as t}from"../../../../core/handleUtils.js";import{isSome as a,isNone as r}from"../../../../core/maybe.js";import{watch as n,syncAndInitial as o,when as l,sync as m}from"../../../../core/reactiveUtils.js";import{pt2px as d}from"../../../../core/screenUtils.js";import{property as c}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import"../../../../core/arrayUtils.js";import{subclass as h}from"../../../../core/accessorSupport/decorators/subclass.js";import{Z as p}from"../../../../chunks/vec4f64.js";import{LengthDimensionVisualization as u}from"./LengthDimensionVisualization.js";import{settings as f}from"./settings.js";import{RenderOccludedFlag as _}from"../../webgl-engine/lib/Material.js";import{LineMarkerMaterial as g}from"../../webgl-engine/materials/LineMarkerMaterial.js";import{createStipplePatternSimple as M}from"../../webgl-engine/materials/lineStippleUtils.js";import{MarkerTextureCache as y}from"../../webgl-engine/materials/MarkerTextureCache.js";import{RibbonLineMaterial as w}from"../../webgl-engine/materials/RibbonLineMaterial.js";import{LineMarkerAnchor as v}from"../../webgl-engine/shaders/LineMarkerTechniqueConfiguration.js";import{onLocaleChange as L}from"../../../../intl/locale.js";import{fetchMessageBundle as b}from"../../../../intl/messages.js";let j=class extends s{get analysis(){return this.analysisViewData.analysis}get visible(){return this.analysisViewData.visible}constructor(e){super(e),this.loadingMessages=!1,this._messages=null,this._dimensionVisualizations=new Map,this._markerMaterial=new g({width:1,anchor:v.Tip,color:p,placement:"begin-end",worldSpace:!0,hideOnShortSegments:!0,hasTip:!0,renderOccluded:_.OccludeAndTransparent}),this._dimensionLineMaterial=new w({width:1,color:p,renderOccluded:_.OccludeAndTransparent,markerParameters:this._markerMaterial.parameters}),this._offsetLineMaterial=new w({width:1,color:p,renderOccluded:_.OccludeAndTransparent,stipplePattern:M(5),stippleScaleWithLineWidth:!0}),this._smallDimensionLineMaterial=new w({width:1,color:p,renderOccluded:_.OccludeAndTransparent}),this._smallOffsetLineMaterial=new w({width:1,color:p,renderOccluded:_.OccludeAndTransparent,stipplePattern:M(5),stippleScaleWithLineWidth:!0})}initialize(){const e=this.view.sharedSymbolResources?.textures;if(a(e)){const{textureRepository:i}=this.view._stage.renderView,s=new y(e,i),a=s.acquire("triangle");this.addHandles(t((()=>s.destroy()))),this._markerMaterial.setParameters({textureId:a.id})}for(const i of this._lineMaterials())this.view._stage.add(i),this.addHandles(t((()=>{this.view._stage.remove(i),i.dispose()})));const{computations:s}=this.analysisViewData;for(const i of s)this._addComputation(i);this.addHandles([s.on("change",(({added:e,removed:i})=>{for(const s of i)this._removeComputation(s);for(const s of e)this._addComputation(s)})),n((()=>i.toUnitRGBA(this.analysis.style.color)),(e=>{for(const i of this._lineMaterials())i.setParameters({color:e})}),o),n((()=>this.analysis.style.lineSize),(e=>{const i=d(e);this._markerMaterial.setParameters({width:i*f.markers.lineSizeFraction}),this._dimensionLineMaterial.setParameters({width:i,markerParameters:this._markerMaterial.parameters});const s=Math.max(i*f.offsetLine.lineSizeFraction,1);this._offsetLineMaterial.setParameters({width:s})}),o),n((()=>({camera:this.view.state.camera,style:z(this.analysis)})),(({camera:e,style:i})=>{for(const[s,t]of this._dimensionVisualizations)t.updateCameraDependentElements(e,s.geometry,i),t.updateLabelStyle(i)})),n((()=>this.visible),(e=>{for(const i of this._dimensionVisualizations.values())i.visible=e}))]),this.addHandles([L((()=>this._updateMessageBundle())),l((()=>!this.loadingMessages),(()=>{for(const e of this._dimensionVisualizations.values())e.updateUnitsMessages(this._messages)}),m)]),this._updateMessageBundle()}destroy(){this._dimensionVisualizations.forEach((e=>{e.destroy()})),this._dimensionVisualizations.clear()}get testInfo(){return{visualizations:Array.from(this._dimensionVisualizations.values()),disablePartialOcclusion:()=>{for(const e of this._lineMaterials())e.setParameters({renderOccluded:_.Occlude})}}}_addComputation(e){this._dimensionVisualizations.has(e)||this._dimensionVisualizations.set(e,new u({analysis:this.analysis,computation:e,view:this.view,visible:this.visible,markerMaterial:this._markerMaterial,dimensionLineMaterial:this._dimensionLineMaterial,offsetLineMaterial:this._offsetLineMaterial,smallDimensionLineMaterial:this._smallDimensionLineMaterial,smallOffsetLineMaterial:this._smallOffsetLineMaterial,messages:this._messages}))}_removeComputation(e){const i=this._dimensionVisualizations.get(e);r(i)||(i.destroy(),this._dimensionVisualizations.delete(e))}_lineMaterials(){return[this._markerMaterial,this._dimensionLineMaterial,this._offsetLineMaterial,this._smallDimensionLineMaterial,this._smallOffsetLineMaterial]}async _updateMessageBundle(){this.loadingMessages=!0;try{this._messages=await b("esri/core/t9n/Units")}finally{this.loadingMessages=!1}}};function z(e){const{fontSize:i,lineSize:s,textColor:t,textBackgroundColor:a}=e.style;return{fontSize:i,lineSize:s,textBackgroundColor:a.clone(),textColor:t.clone()}}e([c({constructOnly:!0})],j.prototype,"analysisViewData",void 0),e([c({constructOnly:!0,nonNullable:!0})],j.prototype,"view",void 0),e([c()],j.prototype,"analysis",null),e([c()],j.prototype,"visible",null),e([c()],j.prototype,"loadingMessages",void 0),j=e([h("esri.views.3d.analysis.Dimension.DimensionVisualization")],j);export{j as DimensionVisualization};