@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.32/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{rotateZ as r,fromZRotation as s,scale as a,multiply as c,rotateX as l}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{h as u,c as d,f as g,e as m,n as p,g as f,l as b,d as T,i as 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/projection.js";import{Axis as O}from"../../../../geometry/support/Axis.js";import{r as P,f as L,i as v,d as V,n as C,u as _}from"../../../../chunks/boundedPlane.js";import{fromVectorsAndPoint as M,fromPositionAndNormal 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 H,sm4d as U}from"../../../../geometry/support/vectorStacks.js";import{getOutlineColor as x,planeColor as k,getGridColor as G}from"./settings.js";import{verticalDotThreshold as X,smallAngleDotThreshold as D,planeMinBasisScreenLen2 as Y,initialPlaneHalfSizeViewProportion as Z,shiftRestartOffsetDistance as z,resizeHandleEdgePaddingFrac as F,planeOutlineWidth 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,r,s,a){return ni(t,s.worldUpAtPosition(i,H.get()),o,r,a.basis1,a.basis2),u(a.basis1,a.basis1,e),u(a.basis2,a.basis2,n),d(a.origin,i),M(a.basis2,a.basis1,a.origin,a.plane),a}function ni(i,t,e,n,o,r){const s=g(i,t),a=H.get(),c=H.get();switch(n===Mi.HORIZONTAL_OR_VERTICAL?Math.abs(s)>X?Mi.HORIZONTAL:Mi.VERTICAL:n){case Mi.VERTICAL:{const n=Math.abs(s)<=D?i:e.viewUp;m(a,n,t),d(c,t);break}case Mi.HORIZONTAL:m(a,e.viewUp,t),m(c,t,a);break;case Mi.TILTED:{const n=Math.abs(s)<=D?t:e.viewUp;m(a,n,i),m(c,i,a);break}}const l=m(H.get(),a,c);g(l,e.viewForward)>0&&u(c,c,-1),p(o,a),p(r,c)}function oi(i,t,e){const n=t.worldUpAtPosition(i.origin,H.get()),o=i.basis1,r=Oi(i,n),s=Math.round(r/Ni)*Ni;return P(i,s-r,o,e)}function ri(i,t,e,n,o,r){const s=d(H.get(),o.origin);f(s,s,u(H.get(),o.basis1,i.direction[0]<0?1:-1)),f(s,s,u(H.get(),o.basis2,i.direction[1]<0?1:-1));const a=b(o.basis1),c=b(o.basis2),l=T(H.get(),e,s),m=T(H.get(),t,s);let p=0,h=0;if(Ei(i)){const t=Ii(o),e=Ii(r);p=a-.5*i.direction[0]*g(o.basis1,m)/a,h=c-.5*i.direction[1]*g(o.basis2,m)/c;const n=e/t;p*=n,h*=n}const I=p+.5*i.direction[0]*g(o.basis1,l)/a,E=h+.5*i.direction[1]*g(o.basis2,l)/c,A=u(H.get(),o.basis1,I/a),j=u(H.get(),o.basis2,E/c);(I<=0||Ti(r.origin,A,n)<=Y)&&d(A,r.basis1),(E<=0||Ti(r.origin,j,n)<=Y)&&d(j,r.basis2);const R=d(H.get(),s);return f(R,R,u(H.get(),A,i.direction[0]<0?-1:1)),f(R,R,u(H.get(),j,i.direction[1]<0?-1:1)),L(R,A,j,r)}function si(i,t){return Z*Math.min(t.width,t.height)*t.computeRenderPixelSizeAt(i)}function ai(i,t,e,n){const o=m(H.get(),t,e);return m(o,o,t),S(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,H.get()),r=H.get();switch(e){case _i.HEADING:d(r,o);break;case _i.TILT:d(r,i.basis1)}return S(i.origin,r,n)}function ui(i,t,e,n){const s=bi(e,fi.NEGATIVE_X),a=U.get();r(a,t,s.edge*Math.PI/2);const c=p(H.get(),s.basis);let l=u(H.get(),c,s.direction*n.computeScreenPixelSizeAt(s.position)*z);f(l,l,s.position);const d=n.projectToRenderScreen(l,o(H.get())),g=di(n,d);Q(n,d,yi),p(yi.direction,yi.direction);const m=H.get();!g&&v(e,yi,m)&&(l=m),a[12]=0,a[13]=0,a[14]=0,i.modelTransform=a,i.renderLocation=A(l),g?i.state|=Si:i.state&=~Si}function di(i,t){const[e,n,o,r]=i.viewport,s=Math.min(o,r)/16;let a=!0;return t[0]<e+s?(t[0]=e+s,a=!1):t[0]>e+o-s&&(t[0]=e+o-s,a=!1),t[1]<n+s?(t[1]=n+s,a=!1):t[1]>n+r-s&&(t[1]=n+r-s,a=!1),a}function gi(i,t,e,n){const o=b(n.basis1),r=b(n.basis2),l=hi(n),d=Ii(n),g=h(H.get(),0,0,0);f(g,u(H.get(),n.basis1,t.direction[0]),u(H.get(),n.basis2,t.direction[1])),f(g,n.origin,g);let m=0,p=1;if(Ei(t))1===t.direction[0]&&-1===t.direction[1]?m=Ni:1===t.direction[0]&&1===t.direction[1]?m=Math.PI:-1===t.direction[0]&&1===t.direction[1]&&(m=3*Math.PI/2),p=d;else{const i=0!==t.direction[0]?1:2;m=1===i?Ni:0,p=(1===i?r:o)-l}const T=s(U.get(),m);a(T,T,h(H.get(),p,p,p)),c(T,e,T),T[12]=0,T[13]=0,T[14]=0,i.modelTransform=T,i.renderLocation=g}function mi(i,t,e,n){const o=n.worldUpAtPosition(e.origin,H.get()),r=bi(e,fi.POSITIVE_X),a=s(U.get(),r.edge*Math.PI/2);l(a,a,-Oi(e,o)),c(a,t,a),a[12]=0,a[13]=0,a[14]=0,i.modelTransform=a,i.renderLocation=r.position}function pi(i,t,e){const n=bi(e,fi.POSITIVE_Y),o=s(U.get(),n.edge*Math.PI/2);l(o,o,Ni),c(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:f(H.get(),i.origin,i.basis1),edge:t};case fi.POSITIVE_Y:return{basis:i.basis2,direction:1,position:f(H.get(),i.origin,i.basis2),edge:t};case fi.NEGATIVE_X:return{basis:i.basis1,direction:-1,position:T(H.get(),i.origin,i.basis1),edge:t};case fi.NEGATIVE_Y:return{basis:i.basis2,direction:-1,position:T(H.get(),i.origin,i.basis2),edge:t}}}function Ti(i,t,e){const n=e.projectToRenderScreen(f(H.get(),i,t),o(H.get())),r=e.projectToRenderScreen(T(H.get(),i,t),o(H.get()));return I(T(n,n,r))}function hi(i){const t=b(i.basis1),e=b(i.basis2);return F*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:x(i.effectiveTheme),width:W,renderOccluded:ii.OccludeAndTransparent,geometry:[t],isDecoration:!0})}function ji(i){return new J({view:i,attached:!1,backgroundColor:k,gridColor:G(i.effectiveTheme),gridWidth:4,renderOccluded:ii.OccludeAndTransparent,isDecoration:!0})}function Ri(t,n,o,r=new i){if(null==t)return null;const{renderCoordsHelper:s}=n,a=s.fromRenderCoords(t.origin,new R({spatialReference:n.spatialReference}));if(null==a)return null;const c=w(a,o);if(null==c)return null;r.position=c;const l=2*b(t.basis1),u=2*b(t.basis2),d=K.renderUnitScaleFactor(n.spatialReference,o);r.width=l*d,r.height=u*d;const g=s.worldUpAtPosition(t.origin,H.get());return r.tilt=e(Oi(t,g)),r.heading=s.headingAtPosition(t.origin,t.basis1)-90,r}function wi(i,t,e){if(null==i)return null;const n=i.origin,o=H.get(),r=H.get(),s=H.get(),a=H.get();let c,l,u,d,g,m;f(o,n,i.basis1),f(o,o,i.basis2),f(r,n,i.basis1),E(r,r,i.basis2),E(s,n,i.basis1),E(s,s,i.basis2),E(a,n,i.basis1),f(a,a,i.basis2);for(const p of[o,r,s,a]){const i=t.fromRenderCoords(p,p,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]),g=null==g?i[2]:Math.min(g,i[2]),m=null==m?i[2]:Math.max(m,i[2])}return new j({xmin:c,xmax:l,ymin:u,ymax:d,zmin:g,zmax:m,spatialReference:e})}function Oi(i,t){return N(t,i.basis2,i.basis1)+Ni}function Pi(i,e,o,r,s,a,c=V()){return a.toRenderCoords(i,c.origin)?(a.worldBasisAtPosition(c.origin,O.X,c.basis1),a.worldBasisAtPosition(c.origin,O.Y,c.basis2),M(c.basis2,c.basis1,c.origin,c.plane),P(c,-n(e),C(c),c),P(c,n(o),c.basis1,c),u(c.basis1,c.basis1,r/2),u(c.basis2,c.basis2,s/2),_(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,r=i.height*n;return{position:e,heading:i.heading,tilt:i.tilt,renderWidth:o,renderHeight:r}}function vi(i,t,e,n=V()){const o=Li(i,t);return null==o?null:Vi(o,t,e,n)}function Vi(i,t,e,n=V()){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,Hi=ti.Custom1,Ui=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,si 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,Hi as resizeNormal,Ui as resizeOutlineOnly,ri as resizePlane,vi as shapeToPlane,gi as updateResizeHandle,mi as updateRotateHeadingHandle,pi as updateRotateTiltHandle,ui as updateShiftRestartHandle};