UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 3.04 kB
import{_ as e}from"../../../../../chunks/tslib.es6.js";import{HandleOwner as t}from"../../../../../core/HandleOwner.js";import{property as r}from"../../../../../core/accessorSupport/decorators/property.js";import"../../../../../core/accessorSupport/ensureType.js";import"../../../../../core/arrayUtils.js";import{subclass as o}from"../../../../../core/accessorSupport/decorators/subclass.js";import{c as s}from"../../../../../chunks/vec3f64.js";import{WorkerHandle as n}from"../../../../../core/workers/WorkerHandle.js";import{f as i}from"../../../../../chunks/sphere.js";import{asSnappingPoint as a}from"../../SnappingPoint.js";import{EdgeSnappingCandidate as d}from"../../candidates/EdgeSnappingCandidate.js";import{VertexSnappingCandidate as c}from"../../candidates/VertexSnappingCandidate.js";let p=class extends t{constructor(e){super(e),this.availability=0,this._ids=new Set}destroy(){this._workerHandle.destroy(),this._workerHandle=null}initialize(){this._workerHandle=new l(this.schedule,{fetchAllEdgeLocations:(e,t)=>this._fetchAllEdgeLocations(e,t)})}async fetchCandidates(e,t){const r=e.coordinateHelper,{point:o}=e,s=h;this.renderCoordsHelper.toRenderCoords(o,r.spatialReference,s);const n=e.distance,a="number"==typeof n?n:n.distance,d=await this._workerHandle.invoke({bounds:i(s[0],s[1],s[2],a),types:e.types},t);return d.candidates.sort(((e,t)=>e.distance-t.distance)),d.candidates.map((e=>this._convertCandidate(r,e)))}async add(e,t){this._ids.add(e.id),await this._workerHandle.invokeMethod("add",e,t)}async remove(e,t){this._ids.delete(e.id),await this._workerHandle.invokeMethod("remove",e,t)}_convertCandidate(e,t){switch(t.type){case"edge":return new d({objectId:t.objectId,targetPoint:this._convertRenderCoordinate(e,t.target),edgeStart:this._convertRenderCoordinate(e,t.start),edgeEnd:this._convertRenderCoordinate(e,t.end),isDraped:!1});case"vertex":return new c({objectId:t.objectId,targetPoint:this._convertRenderCoordinate(e,t.target),isDraped:!1})}}_convertRenderCoordinate({spatialReference:e},t){const r=s();return this.renderCoordsHelper.fromRenderCoords(t,r,e),a(r)}async _fetchAllEdgeLocations(e,t){const r=[],o=[];for(const{id:s,uid:n}of e.components)this._ids.has(s)&&r.push((async()=>{const e=await this.fetchEdgeLocations(s,t.signal),r=e.locations.buffer;return o.push(r),{id:s,uid:n,objectIds:e.objectIds,locations:r,origin:e.origin,type:e.type}})());return{result:{components:(await Promise.all(r)).filter((({id:e})=>this._ids.has(e)))},transferList:o}}};e([r({constructOnly:!0})],p.prototype,"renderCoordsHelper",void 0),e([r({constructOnly:!0})],p.prototype,"fetchEdgeLocations",void 0),e([r({constructOnly:!0})],p.prototype,"schedule",void 0),e([r({readOnly:!0})],p.prototype,"availability",void 0),p=e([o("esri.views.interactive.snapping.featureSources.sceneLayerSource.SceneLayerSnappingSourceWorker")],p);class l extends n{constructor(e,t){super("SceneLayerSnappingSourceWorker","fetchCandidates",{},e,{strategy:"dedicated",client:t})}}const h=s();export{p as SceneLayerSnappingSourceWorkerHandle};