@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 10.3 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import i from"../../../../analysis/SlicePlane.js";import"../../../../core/has.js";import t from"../../../../core/Logger.js";import{rad2deg as e,deg2rad as n}from"../../../../core/mathUtils.js";import{castRenderScreenPointArray3 as o}from"../../../../core/screenUtils.js";import{fromZRotation as s,scale as r,multiply as a,rotateZ as c,rotateX as l}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{l as u,i as d,f as g,g as m,c as p,d as f,e as b,n as T,h,k as I,a as E}from"../../../../chunks/vec32.js";import{clone as A}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import j from"../../../../geometry/Extent.js";import R from"../../../../geometry/Point.js";import{tryProjectWithZConversion as w}from"../../../../geometry/projectionUtils.js";import{Axis as O}from"../../../../geometry/support/Axis.js";import{d as P,r as L,n as v,u as V,f as C,i as _}from"../../../../chunks/boundedPlane.js";import{fromPositionAndNormal as M,fromVectorsAndPoint as S}from"../../../../geometry/support/plane.js";import{create as y}from"../../../../geometry/support/ray.js";import{angleAroundAxis as N}from"../../../../geometry/support/vector.js";import{sv3d as U,sm4d as H}from"../../../../geometry/support/vectorStacks.js";import{getGridColor as x,planeColor as k,getOutlineColor as G}from"./settings.js";import{resizeHandleEdgePaddingFrac as X,planeOutlineWidth as D,planeMinBasisScreenLen2 as Y,initialPlaneHalfSizeViewProportion as Z,shiftRestartOffsetDistance as z,verticalDotThreshold as F,smallAngleDotThreshold as W}from"./sliceToolConfig.js";import{applyProjectionAndElevationAlignment as B}from"../support/projectionUtils.js";import{calculateTranslateRotateFromBases as $}from"../../interactive/manipulatorUtils.js";import{LineVisualElement as q}from"../../interactive/visualElements/LineVisualElement.js";import{SlicePlaneVisualElement as J}from"../../interactive/visualElements/SlicePlaneVisualElement.js";import{RenderCoordsHelper as K}from"../../support/RenderCoordsHelper.js";import{fromRender as Q}from"../../support/geometryUtils/ray.js";import{RenderOccludedFlag as ii}from"../../webgl-engine/lib/Material.js";import{ManipulatorStateCustomFlags as ti}from"../../../interactive/interfaces.js";function ei(i,t,e,n,o,s,r,a){return ni(t,r.worldUpAtPosition(i,U.get()),o,s,a.basis1,a.basis2),m(a.basis1,a.basis1,e),m(a.basis2,a.basis2,n),p(a.origin,i),S(a.basis2,a.basis1,a.origin,a.plane),a}function ni(i,t,e,n,o,s){const r=b(i,t),a=U.get(),c=U.get();switch(n===Mi.HORIZONTAL_OR_VERTICAL?Math.abs(r)>F?Mi.HORIZONTAL:Mi.VERTICAL:n){case Mi.VERTICAL:{const n=Math.abs(r)<=W?i:e.viewUp;h(a,n,t),p(c,t);break}case Mi.HORIZONTAL:h(a,e.viewUp,t),h(c,t,a);break;case Mi.TILTED:{const n=Math.abs(r)<=W?t:e.viewUp;h(a,n,i),h(c,i,a);break}}const l=h(U.get(),a,c);b(l,e.viewForward)>0&&m(c,c,-1),T(o,a),T(s,c)}function oi(i,t,e){const n=t.worldUpAtPosition(i.origin,U.get()),o=i.basis1,s=Oi(i,n),r=Math.round(s/Ni)*Ni;return L(i,r-s,o,e)}function si(i,t,e,n,o,s){const r=p(U.get(),o.origin);g(r,r,m(U.get(),o.basis1,i.direction[0]<0?1:-1)),g(r,r,m(U.get(),o.basis2,i.direction[1]<0?1:-1));const a=u(o.basis1),c=u(o.basis2),l=f(U.get(),e,r),d=f(U.get(),t,r);let T=0,h=0;if(Ei(i)){const t=Ii(o),e=Ii(s);T=a-.5*i.direction[0]*b(o.basis1,d)/a,h=c-.5*i.direction[1]*b(o.basis2,d)/c;const n=e/t;T*=n,h*=n}const I=T+.5*i.direction[0]*b(o.basis1,l)/a,E=h+.5*i.direction[1]*b(o.basis2,l)/c,A=m(U.get(),o.basis1,I/a),j=m(U.get(),o.basis2,E/c);(I<=0||Ti(s.origin,A,n)<=Y)&&p(A,s.basis1),(E<=0||Ti(s.origin,j,n)<=Y)&&p(j,s.basis2);const R=p(U.get(),r);return g(R,R,m(U.get(),A,i.direction[0]<0?-1:1)),g(R,R,m(U.get(),j,i.direction[1]<0?-1:1)),C(R,A,j,s)}function ri(i,t){return Z*Math.min(t.width,t.height)*t.computeRenderPixelSizeAt(i)}function ai(i,t,e,n){const o=h(U.get(),t,e);return h(o,o,t),M(i,o,n)}function ci(i,t){return $(i.basis1,i.basis2,i.origin,t)}function li(i,t,e,n){const o=t.worldUpAtPosition(i.origin,U.get()),s=U.get();switch(e){case _i.HEADING:p(s,o);break;case _i.TILT:p(s,i.basis1)}return M(i.origin,s,n)}function ui(i,t,e,n){const s=bi(e,fi.NEGATIVE_X),r=H.get();c(r,t,s.edge*Math.PI/2);const a=T(U.get(),s.basis);let l=m(U.get(),a,s.direction*n.computeScreenPixelSizeAt(s.position)*z);g(l,l,s.position);const u=n.projectToRenderScreen(l,o(U.get())),d=di(n,u);Q(n,u,yi),T(yi.direction,yi.direction);const p=U.get();!d&&_(e,yi,p)&&(l=p),r[12]=0,r[13]=0,r[14]=0,i.modelTransform=r,i.renderLocation=A(l),d?i.state|=Si:i.state&=~Si}function di(i,t){const[e,n,o,s]=i.viewport,r=Math.min(o,s)/16;let a=!0;return t[0]<e+r?(t[0]=e+r,a=!1):t[0]>e+o-r&&(t[0]=e+o-r,a=!1),t[1]<n+r?(t[1]=n+r,a=!1):t[1]>n+s-r&&(t[1]=n+s-r,a=!1),a}function gi(i,t,e,n){const o=u(n.basis1),c=u(n.basis2),l=hi(n),p=Ii(n),f=d(U.get(),0,0,0);g(f,m(U.get(),n.basis1,t.direction[0]),m(U.get(),n.basis2,t.direction[1])),g(f,n.origin,f);let b=0,T=1;if(Ei(t))1===t.direction[0]&&-1===t.direction[1]?b=Ni:1===t.direction[0]&&1===t.direction[1]?b=Math.PI:-1===t.direction[0]&&1===t.direction[1]&&(b=3*Math.PI/2),T=p;else{const i=0!==t.direction[0]?1:2;b=1===i?Ni:0,T=(1===i?c:o)-l}const h=s(H.get(),b);r(h,h,d(U.get(),T,T,T)),a(h,e,h),h[12]=0,h[13]=0,h[14]=0,i.modelTransform=h,i.renderLocation=f}function mi(i,t,e,n){const o=n.worldUpAtPosition(e.origin,U.get()),r=bi(e,fi.POSITIVE_X),c=s(H.get(),r.edge*Math.PI/2);l(c,c,-Oi(e,o)),a(c,t,c),c[12]=0,c[13]=0,c[14]=0,i.modelTransform=c,i.renderLocation=r.position}function pi(i,t,e){const n=bi(e,fi.POSITIVE_Y),o=s(H.get(),n.edge*Math.PI/2);l(o,o,Ni),a(o,t,o),o[12]=0,o[13]=0,o[14]=0,i.modelTransform=o,i.renderLocation=n.position}var fi;function bi(i,t){switch(t){case fi.POSITIVE_X:return{basis:i.basis1,direction:1,position:g(U.get(),i.origin,i.basis1),edge:t};case fi.POSITIVE_Y:return{basis:i.basis2,direction:1,position:g(U.get(),i.origin,i.basis2),edge:t};case fi.NEGATIVE_X:return{basis:i.basis1,direction:-1,position:f(U.get(),i.origin,i.basis1),edge:t};case fi.NEGATIVE_Y:return{basis:i.basis2,direction:-1,position:f(U.get(),i.origin,i.basis2),edge:t}}}function Ti(i,t,e){const n=e.projectToRenderScreen(g(U.get(),i,t),o(U.get())),s=e.projectToRenderScreen(f(U.get(),i,t),o(U.get()));return I(f(n,n,s))}function hi(i){const t=u(i.basis1),e=u(i.basis2);return X*Math.min(t,e)}function Ii(i){return hi(i)}function Ei(i){return 0!==i.direction[0]&&0!==i.direction[1]}function Ai(i){const t=[[-1,-1,0],[1,-1,0],[1,1,0],[-1,1,0],[-1,-1,0]];return new q({view:i,attached:!1,color:G(i.effectiveTheme),width:D,renderOccluded:ii.OccludeAndTransparent,geometry:[t],isDecoration:!0})}function ji(i){return new J({view:i,attached:!1,backgroundColor:k,gridColor:x(i.effectiveTheme),gridWidth:4,renderOccluded:ii.OccludeAndTransparent,isDecoration:!0})}function Ri(t,n,o,s=new i){if(null==t)return null;const{renderCoordsHelper:r}=n,a=r.fromRenderCoords(t.origin,new R({spatialReference:n.spatialReference}));if(null==a)return null;const c=w(a,o);if(null==c)return null;s.position=c;const l=2*u(t.basis1),d=2*u(t.basis2),g=K.renderUnitScaleFactor(n.spatialReference,o);s.width=l*g,s.height=d*g;const m=r.worldUpAtPosition(t.origin,U.get());return s.tilt=e(Oi(t,m)),s.heading=r.headingAtPosition(t.origin,t.basis1)-90,s}function wi(i,t,e){if(null==i)return null;const n=i.origin,o=U.get(),s=U.get(),r=U.get(),a=U.get();let c,l,u,d,m,p;g(o,n,i.basis1),g(o,o,i.basis2),g(s,n,i.basis1),E(s,s,i.basis2),E(r,n,i.basis1),E(r,r,i.basis2),E(a,n,i.basis1),g(a,a,i.basis2);for(const g of[o,s,r,a]){const i=t.fromRenderCoords(g,g,e);if(null==i)return null;c=null==c?i[0]:Math.min(c,i[0]),l=null==l?i[0]:Math.max(l,i[0]),u=null==u?i[1]:Math.min(u,i[1]),d=null==d?i[1]:Math.max(d,i[1]),m=null==m?i[2]:Math.min(m,i[2]),p=null==p?i[2]:Math.max(p,i[2])}return new j({xmin:c,xmax:l,ymin:u,ymax:d,zmin:m,zmax:p,spatialReference:e})}function Oi(i,t){return N(t,i.basis2,i.basis1)+Ni}function Pi(i,e,o,s,r,a,c=P()){return a.toRenderCoords(i,c.origin)?(a.worldBasisAtPosition(c.origin,O.X,c.basis1),a.worldBasisAtPosition(c.origin,O.Y,c.basis2),S(c.basis2,c.basis1,c.origin,c.plane),L(c,-n(e),v(c),c),L(c,n(o),c.basis1,c),m(c.basis1,c.basis1,s/2),m(c.basis2,c.basis2,r/2),V(c),c):(t.getLogger("esri.views.3d.analysis.Slice.sliceToolUtils").error(`Failed to project slice plane position, projection from ${i.spatialReference.wkid} is not supported`),null)}function Li(i,t){if(null==i?.position)return null;const e=B(i.position,t.spatialReference,t.elevationProvider);if(null==e)return null;const n=K.renderUnitScaleFactor(i.position.spatialReference,t.spatialReference),o=i.width*n,s=i.height*n;return{position:e,heading:i.heading,tilt:i.tilt,renderWidth:o,renderHeight:s}}function vi(i,t,e,n=P()){const o=Li(i,t);return null==o?null:Vi(o,t,e,n)}function Vi(i,t,e,n=P()){if(null==i)return null;const o=Pi(i.position,i.heading,i.tilt,i.renderWidth,i.renderHeight,t.renderCoordsHelper,n);return e.tiltEnabled||null==o||oi(o,t.renderCoordsHelper,o),o}!function(i){i[i.POSITIVE_X=0]="POSITIVE_X",i[i.POSITIVE_Y=1]="POSITIVE_Y",i[i.NEGATIVE_X=2]="NEGATIVE_X",i[i.NEGATIVE_Y=3]="NEGATIVE_Y"}(fi||(fi={}));const Ci=ti.Custom1;var _i,Mi;!function(i){i[i.HEADING=1]="HEADING",i[i.TILT=2]="TILT"}(_i||(_i={})),function(i){i[i.HORIZONTAL_OR_VERTICAL=0]="HORIZONTAL_OR_VERTICAL",i[i.HORIZONTAL=1]="HORIZONTAL",i[i.VERTICAL=2]="VERTICAL",i[i.TILTED=3]="TILTED"}(Mi||(Mi={}));const Si=ti.Custom2,yi=y(),Ni=Math.PI/2,Ui=ti.Custom1,Hi=ti.Custom2;function xi(i){return null!=("building-scene-3d"===i.type?i:null)}export{Ci as DidPointerMoveRecentlyFlag,Si as IsShiftEdgeOnScreenFlag,_i as RotationAxis,Mi as SliceOrientation,ci as calculateBoundedPlaneTranslateRotate,Ii as calculateDiagonalResizeHandleScale,ri as calculatePlaneHalfSize,ji as createGridVisualElement,Ai as createOutlineVisualElement,ei as createPlane,li as createRotatePlane,ai as createShiftPlane,oi as forceHorizontalOrVertical,Ei as isDiagonalResizeHandle,xi as isIBuildingSceneLayerView3D,ni as normalToBases,wi as planeToExtent,Ri as planeToShape,Li as projectAndElevationAlignShape,Vi as projectedShapeToPlane,Ui as resizeNormal,Hi as resizeOutlineOnly,si as resizePlane,vi as shapeToPlane,gi as updateResizeHandle,mi as updateRotateHeadingHandle,pi as updateRotateTiltHandle,ui as updateShiftRestartHandle};