UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 5.99 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{_ as i}from"../../../../chunks/tslib.es6.js";import t from"../../../../Color.js";import e from"../../../../core/Accessor.js";import o from"../../../../core/Handles.js";import{makeHandle as n}from"../../../../core/handleUtils.js";import"../../../../core/has.js";import{destroyMaybe as s}from"../../../../core/maybe.js";import{initial as r}from"../../../../core/reactiveUtils.js";import{property as a}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/Logger.js";import"../../../../core/RandomLCG.js";import{subclass as l}from"../../../../core/accessorSupport/decorators/subclass.js";import{create as c}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{d}from"../../../../chunks/vec32.js";import{create as u,fromArray as m}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{UpdatingHandles as p}from"../../../../core/support/UpdatingHandles.js";import{lineOfSightConfiguration as h}from"./LineOfSightConfiguration.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"../../webgl-engine/lib/Material.js";let b=class extends e{constructor(i){super(i),this._lineOfSightVisualElements=new Array,this._computationHandles=new o,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(){}_createLineOfSightVisualization(){const i=h,e=this.view,o=this.isDecoration,n={view:e,attached:!0,width:i.outerWidth,innerWidth:i.innerWidth,isDecoration:o},s=t.toUnitRGBA(i.visibleOuterColor),r=t.toUnitRGBA(i.visibleInnerColor),a=t.toUnitRGBA(i.occludedOuterColor),l=t.toUnitRGBA(i.occludedInnerColor),c=t.toUnitRGBA(i.undefinedOuterColor),d=t.toUnitRGBA(i.undefinedInnerColor),u=new g({...n,color:s,innerColor:r}),m=new g({...n,color:a,innerColor:l}),p=new g({...n,color:c,innerColor:d}),b=new f({view:e,attached:!0,..._,size:8,isDecoration:o}),y=new v(u,m,p,b);return this._lineOfSightVisualElements.push(y),y}_destroyLineOfSightVisualization(i){i.destroy(),this._lineOfSightVisualElements.splice(this._lineOfSightVisualElements.indexOf(i),1)}_updateLineOfSightVisualization(i,e,o){const n=h,{computationResult:s,inputPoints:r}=i,{start:a,end:l,intersection:c,isValid:u,isTargetVisible:p}=s,{observer:v}=r,g=V;g[12]=v[0],g[13]=v[1],g[14]=v[2];const f=d(y,a,v),b=d(C,l,v),_=d(O,c,v),{visibleLineVisualElement:A,occludedLineVisualElement:E,undefinedLineVisualElement:w,targetVisualElement:j}=e,L=null==this.analysisViewData.elevationAlignedObserver||null==i.elevationAlignedTargetLocation,S=this.visible&&!L;A.visible=S,E.visible=S,w.visible=S,j.visible=S,j.attached=!o.interactiveAndEditable,S&&(A.geometry=null,E.geometry=null,w.geometry=null,j.geometry=i.elevationAlignedTargetLocation,u?p?(A.geometry=[[m(f),m(b)]],A.transform=g,A.color=t.toUnitRGBA(n.visibleOuterColor),j.color=t.toUnitRGBA(n.visibleInnerColor)):(A.geometry=[[m(f),m(_)]],A.transform=g,A.color=t.toUnitRGBA(n.occludedOuterColor),E.geometry=[[m(_),m(b)]],E.transform=g,j.color=t.toUnitRGBA(n.occludedInnerColor)):(w.geometry=[[m(f),m(b)]],w.transform=g,j.color=t.toUnitRGBA(n.undefinedInnerColor)))}_getLineOfSightVisualizationDependencies(i){const{computationResult:t}=i,{occludedOuterColor:e,visibleOuterColor:o}=h;return{computationResult:t,occludedOuterColor:e,visibleOuterColor:o,visible:this.visible,interactiveAndEditable:this.interactiveAndEditable}}_connectComputation(i){const t=this._computationHandles;if(t.has(i))return;const e=this._createLineOfSightVisualization();t.add([this._updatingHandles.add((()=>this._getLineOfSightVisualizationDependencies(i)),(t=>this._updateLineOfSightVisualization(i,e,t)),{initial:!0,equals:()=>!1}),n((()=>this._destroyLineOfSightVisualization(e)))],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:t}){for(const e of t)this._disconnectComputation(e);for(const e of i)this._connectComputation(e)}_createObserverVisualization(){const i=t.toUnitRGBA(h.visibleInnerColor),e=new f({view:this.view,color:i,..._,isDecoration:this.isDecoration});this._observerVisualElement=e,this.addHandles(this._updatingHandles.add((()=>({observer:this.analysisViewData.elevationAlignedObserver,interactiveAndEditable:this.interactiveAndEditable,visible:this.visible})),(({observer:i,interactiveAndEditable:t,visible:o})=>{null!=i&&!t&&o?(e.geometry=i,this._observerVisualElement.attached=!0):e.attached=!1}),r))}};i([a({constructOnly:!0})],b.prototype,"analysis",void 0),i([a({constructOnly:!0})],b.prototype,"analysisViewData",void 0),i([a({constructOnly:!0})],b.prototype,"view",void 0),i([a({readOnly:!0})],b.prototype,"visible",null),i([a({constructOnly:!0})],b.prototype,"isDecoration",void 0),i([a()],b.prototype,"updating",null),i([a()],b.prototype,"interactiveAndEditable",null),i([a()],b.prototype,"test",null),b=i([l("esri.views.3d.analysis.LineOfSight.LineOfSightVisualization")],b);const _={size:6,pixelSnappingEnabled:!1,primitive:"circle",elevationInfo:{mode:"absolute-height",offset:0},outlineSize:0},y=u(),C=u(),O=u(),V=c();export{b as LineOfSightVisualization};