UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 6.08 kB
import{_ as i}from"../../../../chunks/tslib.es6.js";import e from"../../../../Color.js";import t from"../../../../core/Accessor.js";import n from"../../../../core/Handles.js";import{makeHandle as o}from"../../../../core/handleUtils.js";import{destroyMaybe as s,isNone as r}from"../../../../core/maybe.js";import{initial as a}from"../../../../core/reactiveUtils.js";import{property as l}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import"../../../../core/arrayUtils.js";import{subclass as c}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as u}from"../../../../chunks/mat4f64.js";import{b as d}from"../../../../chunks/vec3.js";import{d as m,c as h}from"../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as p}from"../../../../core/support/WatchUpdatingTracking.js";import{LineOfSightVisualElement as v}from"./LineOfSightVisualElement.js";import{LineVisualElement as g}from"../../interactive/visualElements/LineVisualElement.js";import{PointVisualElement as f}from"../../interactive/visualElements/PointVisualElement.js";import{RenderOccludedFlag as b}from"../../webgl-engine/lib/Material.js";let _=class extends t{constructor(i){super(i),this._lineOfSightVisualElements=new Array,this._computationHandles=new n,this._updatingHandles=new p}initialize(){this.addHandles(this._connectComputations()),this._createObserverVisualization()}destroy(){this._updatingHandles=s(this._updatingHandles),this._computationHandles=s(this._computationHandles),this._observerVisualElement=s(this._observerVisualElement)}get visible(){return this.analysisViewData.visible}get updating(){return this._updatingHandles.updating}get interactiveAndEditable(){return this.analysisViewData.interactive&&this.analysisViewData.editable}get test(){return{disablePartialOcclusion:()=>{for(const i of this._lineOfSightVisualElements)i.visibleLineVisualElement.renderOccluded=b.Occlude,i.occludedLineVisualElement.renderOccluded=b.Occlude,i.undefinedLineVisualElement.renderOccluded=b.Occlude},visualizations:this._lineOfSightVisualElements}}get _configuration(){return this.analysisViewData.configuration}_createLineOfSightVisualization(){const i=this._configuration,t=this.view,n={view:t,attached:!0,width:i.outerWidth,innerWidth:i.innerWidth},o=e.toUnitRGBA(i.visibleOuterColor),s=e.toUnitRGBA(i.visibleInnerColor),r=e.toUnitRGBA(i.occludedOuterColor),a=e.toUnitRGBA(i.occludedInnerColor),l=e.toUnitRGBA(i.undefinedOuterColor),c=e.toUnitRGBA(i.undefinedInnerColor),u=new g({...n,color:o,innerColor:s}),d=new g({...n,color:r,innerColor:a}),m=new g({...n,color:l,innerColor:c}),h=new f({view:t,attached:!0,...O,size:8}),p=new v(u,d,m,h);return this._lineOfSightVisualElements.push(p),p}_destroyLineOfSightVisualization(i){i.destroy(),this._lineOfSightVisualElements.splice(this._lineOfSightVisualElements.indexOf(i),1)}_updateLineOfSightVisualization(i,t,n){const o=this._configuration,{computationResult:s,inputPoints:a}=i,{start:l,end:c,intersection:u,isValid:h,isTargetVisible:p}=s,{observer:v}=a,g=E;g[12]=v[0],g[13]=v[1],g[14]=v[2];const f=d(V,l,v),b=d(y,c,v),_=d(C,u,v),{visibleLineVisualElement:O,occludedLineVisualElement:w,undefinedLineVisualElement:A,targetVisualElement:S}=t,L=r(this.analysisViewData.elevationAlignedObserver)||r(i.elevationAlignedTargetLocation),j=this.visible&&!L;O.visible=j,w.visible=j,A.visible=j,S.visible=j,S.attached=!n.interactiveAndEditable,j&&(O.geometry=null,w.geometry=null,A.geometry=null,S.geometry=i.elevationAlignedTargetLocation,h?p?(O.geometry=[[m(f),m(b)]],O.transform=g,O.color=e.toUnitRGBA(o.visibleOuterColor),S.color=e.toUnitRGBA(o.visibleInnerColor)):(O.geometry=[[m(f),m(_)]],O.transform=g,O.color=e.toUnitRGBA(o.occludedOuterColor),w.geometry=[[m(_),m(b)]],w.transform=g,S.color=e.toUnitRGBA(o.occludedInnerColor)):(A.geometry=[[m(f),m(b)]],A.transform=g,S.color=e.toUnitRGBA(o.undefinedInnerColor)))}_getLineOfSightVisualizationDependencies(i){const{computationResult:e}=i,{occludedOuterColor:t,visibleOuterColor:n}=this._configuration;return{computationResult:e,occludedOuterColor:t,visibleOuterColor:n,visible:this.visible,interactiveAndEditable:this.interactiveAndEditable}}_connectComputation(i){const e=this._computationHandles;if(e.has(i))return;const t=this._createLineOfSightVisualization();e.add([this._updatingHandles.add((()=>this._getLineOfSightVisualizationDependencies(i)),(e=>this._updateLineOfSightVisualization(i,t,e)),{initial:!0,equals:()=>!1}),o((()=>this._destroyLineOfSightVisualization(t)))],i)}_disconnectComputation(i){this._computationHandles.remove(i)}_connectComputations(){return this._updatingHandles.addOnCollectionChange((()=>this.analysisViewData.computations),(i=>this._onComputationsCollectionChange(i)),{initial:!0,final:!0})}_onComputationsCollectionChange({added:i,removed:e}){for(const t of e)this._disconnectComputation(t);for(const t of i)this._connectComputation(t)}_createObserverVisualization(){const i=e.toUnitRGBA(this._configuration.visibleInnerColor),t=new f({view:this.view,attached:!1,color:i,...O});this._observerVisualElement=t,this.addHandles(this._updatingHandles.add((()=>({observer:this.analysisViewData.elevationAlignedObserver,interactiveAndEditable:this.interactiveAndEditable,visible:this.visible})),(({observer:i,interactiveAndEditable:e,visible:n})=>{r(i)||e||!n?t.attached=!1:(t.geometry=i,this._observerVisualElement.attached=!0)}),a))}};i([l({constructOnly:!0})],_.prototype,"analysis",void 0),i([l({constructOnly:!0})],_.prototype,"analysisViewData",void 0),i([l({constructOnly:!0})],_.prototype,"view",void 0),i([l({readOnly:!0})],_.prototype,"visible",null),i([l()],_.prototype,"updating",null),i([l()],_.prototype,"interactiveAndEditable",null),i([l()],_.prototype,"test",null),i([l()],_.prototype,"_configuration",null),_=i([c("esri.views.3d.analysis.LineOfSight.LineOfSightVisualization")],_);const O={size:6,pixelSnappingEnabled:!1,primitive:"circle",elevationInfo:{mode:"absolute-height",offset:0},outlineSize:0},V=h(),y=h(),C=h(),E=u();export{_ as LineOfSightVisualization};