UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 4.46 kB
import{isSome as e,isNone as r,unwrapOr as t}from"../../../../core/maybe.js";import{screenPointObjectToArray as n,castScreenPointArray as o,createScreenPointArray as s}from"../../../../core/screenUtils.js";import{l as c,c as l,f as i,b as a,e as u,g as p,a as m}from"../../../../chunks/vec3.js";import{c as d}from"../../../../chunks/vec3f64.js";import{projectPoint as f}from"../../../../geometry/projection.js";import{intersectRay as g,create as y,fromPositionAndNormal as E}from"../../../../geometry/support/plane.js";import{create as S}from"../../../../geometry/support/ray.js";import{projectPoint as j}from"../../../../geometry/support/vector.js";import{sv2d as v}from"../../../../geometry/support/vectorStacks.js";import{getZForElevationMode as b,getGraphicEffectiveElevationInfo as x}from"../../../../support/elevationInfoUtils.js";import{fromScreen as R}from"../../support/geometryUtils/ray.js";import{newIntersector as I}from"../../webgl-engine/lib/Intersector.js";import{StoreResults as w,IntersectorType as H}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{TERRAIN_ID as U}from"../../webgl-engine/lib/verticalOffsetUtils.js";import{EventPipeline as O}from"../../../interactive/dragEventPipeline.js";function C(e,r){return D(e,(()=>r))}function T(e){return D(e,(e=>e.plane))}function D(t,s){const c=d(),l=d();let i=!1;return a=>{const u=s(a);if("start"===a.action){const r=n(a.screenStart,o(v.get())),s=R(t.state.camera,r,L);e(s)&&(i=g(u,s,c))}if(!i)return null;const p=n(a.screenEnd,o(v.get())),m=R(t.state.camera,p,L);return r(m)?null:g(u,m,l)?{...a,renderStart:c,renderEnd:l,plane:u,ray:m}:null}}function M(t,n,o=0,c=null,l=null){let i=null;return a=>{if("start"===a.action&&(i=t.sceneIntersectionHelper.intersectElevationFromScreen(s(a.screenStart.x,a.screenStart.y),n,o,l),e(i)&&e(c)&&!f(i,i,c)))return null;if(r(i))return null;const u=t.sceneIntersectionHelper.intersectElevationFromScreen(s(a.screenEnd.x,a.screenEnd.y),n,o,l);return e(u)?e(c)&&!f(u,u,c)?null:{...a,mapStart:i,mapEnd:u}:null}}function N(e,r,t,n=null,o=null){return M(e,t,b(r,e,t),n,o)}function P(e,r,t,n=null,o=null){return N(e,t,x(r),n,o)}function h(r,t,n,o){const s=t.toMap(r.screenStart,{include:[n]});return e(s)?P(t,n,s,o):null}function k(e,r){const t=J,n=K,o=y();e.renderCoordsHelper.worldUpAtPosition(r,t);const s=i(o,t,a(n,r,e.state.camera.eye));return i(s,s,t),E(r,s,o)}function G(e,r,t){let n=null;const o=new O;return o.next(C(e,k(e,r))).next(A(e,r)).next(F(e,t)).next((e=>{e.mapEnd.x=e.mapStart.x,e.mapEnd.y=e.mapStart.y,n=e})),e=>(n=null,o.execute(e),n)}function A(e,r){const t=d(),n=c(r);e.renderCoordsHelper.worldUpAtPosition(r,t);const o=d(),s=d(),i=o=>{if(a(o,o,r),j(t,o,o),"global"===e.viewingMode){c(o)*Math.sign(u(t,o))<.001-n&&a(o,p(o,t,.001),r)}return m(o,o,r),o};return e=>(e.renderStart=i(l(o,e.renderStart)),e.renderEnd=i(l(s,e.renderEnd)),e)}function F(r,t){const n=r.renderCoordsHelper;return r=>{const o=n.fromRenderCoords(r.renderStart,t),s=n.fromRenderCoords(r.renderEnd,t);return e(o)&&e(s)?{...r,mapStart:o,mapEnd:s}:null}}var q;function z(r){let t=null;return n=>{switch(n.action){case"start":t=r.disableDisplay();break;case"end":case"cancel":e(t)&&(t.remove(),t=null)}return n}}function B(o,c=null){const l=I(o.state.viewingMode);l.options.selectionMode=!0,l.options.store=w.MIN,l.options.hud=!1;const i=s(),a={requiresGroundFeedback:!0,enableDraped:!0,exclude:new Set},u=d(),p=t(c,o.spatialReference),m=e=>{o.map.ground&&o.map.ground.opacity<1?a.exclude.add(U):a.exclude.delete(U),o.sceneIntersectionHelper.intersectIntersectorScreen(n(e,i),l,a);const r=l.results.min;let t;if(r.getIntersectionPoint(u))t=r.intersector===H.TERRAIN?q.GROUND:q.OTHER;else{if(!l.results.ground.getIntersectionPoint(u))return null;t=q.GROUND}return{location:o.renderCoordsHelper.fromRenderCoords(u,p),surfaceType:t}};let f;return t=>{if("start"===t.action){const r=m(t.screenStart);f=e(r)?r.location:null}if(r(f))return null;const n=m(t.screenEnd);return e(n)&&e(n.location)?{...t,mapStart:f,mapEnd:n.location,surfaceType:n.surfaceType}:null}}!function(e){e[e.GROUND=0]="GROUND",e[e.OTHER=1]="OTHER"}(q||(q={}));const J=d(),K=d(),L=S();export{q as SurfaceType,F as convertToMapCoordinates,z as hideManipulatorWhileDragging,A as projectToWorldUp,B as screenToMap3D,N as screenToMapXYAtLocation,h as screenToMapXYForGraphic,P as screenToMapXYForGraphicAtLocation,C as screenToRenderPlane,T as screenToRenderPlaneFromEvent,G as screenToZConstrained};