UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 5.67 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import{__decorate as i}from"tslib";import t from"../../../../core/Accessor.js";import e from"../../../../core/Handles.js";import{makeHandle as o}from"../../../../core/handleUtils.js";import"../../../../core/has.js";import{destroyMaybe as n}from"../../../../core/maybe.js";import{initial as s}from"../../../../core/reactiveUtils.js";import{property as r,subclass as a}from"../../../../core/accessorSupport/decorators.js";import{create as l}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{subtract as c}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{fromArray as d,create as u}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{UpdatingHandles as m}from"../../../../core/support/UpdatingHandles.js";import{lineOfSightConfiguration as h}from"./LineOfSightConfiguration.js";import{LineOfSightVisualElement as p}from"./LineOfSightVisualElement.js";import{LineVisualElement as v}from"../../interactive/visualElements/LineVisualElement.js";import{PointVisualElement as g}from"../../interactive/visualElements/PointVisualElement.js";let f=class extends t{constructor(i){super(i),this._lineOfSightVisualElements=new Array,this._computationHandles=new e,this._updatingHandles=new m}initialize(){this.addHandles(this._connectComputations()),this._createObserverVisualization()}destroy(){this._updatingHandles=n(this._updatingHandles),this._computationHandles=n(this._computationHandles),this._observerVisualElement=n(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,t=this.view,e=this.isDecoration,o={view:t,attached:!0,width:i.outerWidth,innerWidth:i.innerWidth,isDecoration:e},n=i.visibleOuterColor.toUnitRGBA(),s=i.visibleInnerColor.toUnitRGBA(),r=i.occludedOuterColor.toUnitRGBA(),a=i.occludedInnerColor.toUnitRGBA(),l=i.undefinedOuterColor.toUnitRGBA(),c=i.undefinedInnerColor.toUnitRGBA(),d=new v({...o,color:n,innerColor:s}),u=new v({...o,color:r,innerColor:a}),m=new v({...o,color:l,innerColor:c}),f=new g({view:t,attached:!0,...b,size:8,isDecoration:e}),_=new p(d,u,m,f);return this._lineOfSightVisualElements.push(_),_}_destroyLineOfSightVisualization(i){i.destroy(),this._lineOfSightVisualElements.splice(this._lineOfSightVisualElements.indexOf(i),1)}_updateLineOfSightVisualization(i,t,e){const o=h,{computationResult:n,inputPoints:s}=i,{start:r,end:a,intersection:l,isValid:u,isTargetVisible:m}=n,{observer:p}=s,v=V;v[12]=p[0],v[13]=p[1],v[14]=p[2];const g=c(_,r,p),f=c(y,a,p),b=c(O,l,p),{visibleLineVisualElement:C,occludedLineVisualElement:A,undefinedLineVisualElement:E,targetVisualElement:w}=t,S=null==this.analysisViewData.elevationAlignedObserver||null==i.elevationAlignedTargetLocation,L=this.visible&&!S;C.visible=L,A.visible=L,E.visible=L,w.visible=L,w.attached=!e.interactiveAndEditable,L&&(C.geometry=null,A.geometry=null,E.geometry=null,w.geometry=i.elevationAlignedTargetLocation,u?m?(C.geometry=[[d(g),d(f)]],C.transform=v,C.color=o.visibleOuterColor.toUnitRGBA(),w.color=o.visibleInnerColor.toUnitRGBA()):(C.geometry=[[d(g),d(b)]],C.transform=v,C.color=o.occludedOuterColor.toUnitRGBA(),A.geometry=[[d(b),d(f)]],A.transform=v,w.color=o.occludedInnerColor.toUnitRGBA()):(E.geometry=[[d(g),d(f)]],E.transform=v,w.color=o.undefinedInnerColor.toUnitRGBA()))}_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}),o(()=>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=h.visibleInnerColor.toUnitRGBA(),t=new g({view:this.view,color:i,...b,isDecoration:this.isDecoration});this._observerVisualElement=t,this.addHandles(this._updatingHandles.add(()=>({observer:this.analysisViewData.elevationAlignedObserver,interactiveAndEditable:this.interactiveAndEditable,visible:this.visible}),({observer:i,interactiveAndEditable:e,visible:o})=>{null!=i&&!e&&o?(t.geometry=i,this._observerVisualElement.attached=!0):t.attached=!1},s))}};i([r({constructOnly:!0})],f.prototype,"analysis",void 0),i([r({constructOnly:!0})],f.prototype,"analysisViewData",void 0),i([r({constructOnly:!0})],f.prototype,"view",void 0),i([r({readOnly:!0})],f.prototype,"visible",null),i([r({constructOnly:!0})],f.prototype,"isDecoration",void 0),i([r()],f.prototype,"updating",null),i([r()],f.prototype,"interactiveAndEditable",null),i([r()],f.prototype,"test",null),f=i([a("esri.views.3d.analysis.LineOfSight.LineOfSightVisualization")],f);const b={size:6,pixelSnappingEnabled:!1,primitive:"circle",elevationInfo:{mode:"absolute-height",offset:0},outlineSize:0},_=u(),y=u(),O=u(),V=l();export{f as LineOfSightVisualization};