UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 3.82 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import t from"../../../../core/Handles.js";import{deg2rad as i}from"../../../../core/mathUtils.js";import{fromScaling as e,fromTranslation as a,fromZRotation as r,mul as o,fromYRotation as n,multiply as s}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as l}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{i as m,g as p,f as c,a as u,H as h,e as d,b as f,n as _}from"../../../../chunks/vec32.js";import{create as g}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{f as T}from"../../../../chunks/boundedPlane.js";import{fromValues as v}from"../../../../geometry/support/ray.js";import{displayFocusMultiplier as j}from"../Slice/sliceToolConfig.js";import{ArrowManipulator as w}from"./ArrowManipulator.js";import{viewshedToolManipulatorConfiguration as D}from"./ViewshedConfiguration.js";import{getViewshedRotationMatrix as R,screenToCircleAngle as S}from"./viewshedToolUtils.js";import{screenToRenderRay as E}from"../../interactive/editingTools/dragEventPipeline3D.js";import{ManipulatorType as H}from"../../interactive/editingTools/ManipulatorType.js";import{discRadiusSmall as x,discRadius as M}from"../../interactive/editingTools/manipulations/config.js";import{InteractiveManipulation as y}from"../../interactive/editingTools/manipulations/InteractiveManipulation.js";import{createManipulatorDragEventPipeline as P,dragAtLocation as b}from"../../../interactive/dragEventPipeline.js";class A extends y{constructor(i){super(),this._handles=new t,this._tool=i.tool,this._view=i.view;const e=D.scaleOrientHandleRadius;this._manipulatorHeading=new w(this._view,e),this._manipulatorTilt=new w(this._view,e),this._manipulatorDistance=new w(this._view,e),this.forEachManipulator((t=>this._tool.manipulators.add(t)))}destroy(){this._handles.destroy(),this.forEachManipulator((t=>{this._tool.manipulators.remove(t),t.destroy()})),this._manipulatorHeading=null,this._manipulatorTilt=null,this._manipulatorDistance=null,this._tool=null,this._view=null}createHeadingDragPipeline(t,e){return P(this._manipulatorHeading,((a,r,o,n,s)=>{const l=this._view,{tiltParallelToSurface:m,farDistanceRenderSpace:d,upVector:f,observerRenderSpace:_,targetRenderSpace:g,rightVector:v}=e,j=Math.sin(i(m))*d,w=c(V,_,p(C,f,j)),D=u(C,g,w),R=p(I,v,h(D)),E=T(w,D,R),x=S(r,l,E,e).next((t=>({...t,manipulatorType:H.ROTATE})));t(a,x,o)}))}createTiltDragPipeline(t,i){return P(this._manipulatorTilt,((e,a,r,o,n)=>{const{observerRenderSpace:s,farDistanceRenderSpace:l,upVector:m,targetDirection:c}=i,u=d(c,m),h=f(V,c,m,-u);p(h,_(h,h),l);const g=p(C,m,l),v=T(s,h,g),j=S(a,this._view,v,i).next((t=>({...t,manipulatorType:H.ROTATE})));t(e,j,r)}))}createDistanceDragPipeline(t,i){return P(this._manipulatorDistance,((e,a,r,o,n)=>{const s=v(i.observerRenderSpace,i.targetDirection),l=a.next(b(this._view,e.location)).next(E(this._view,s)).next((t=>({...t,manipulatorType:H.SCALE})));t(e,l,r)}))}updateManipulators(t){const{targetRenderSpace:i}=t;this._manipulatorHeading.renderLocation=i,this._manipulatorTilt.renderLocation=i,this._manipulatorDistance.renderLocation=i;const c=l(),u=t=>{s(c,t,c)},h=D.scaleOrientSize*(x/M);u(e(O,m(V,h,h,h))),u(R(t,O));const d=D.scaleOrientHandleRadius*j*h,f=p(V,t.targetDirection,d);u(a(O,f));const _=r(O,-k);o(_,_,n(L,-k)),this._manipulatorHeading.modelTransform=o(l(),c,_);const g=n(O,k);o(g,g,r(L,Math.PI)),this._manipulatorTilt.modelTransform=s(l(),c,g),this._manipulatorDistance.modelTransform=c}forEachManipulator(t){t(this._manipulatorHeading,H.ROTATE),t(this._manipulatorTilt,H.ROTATE),t(this._manipulatorDistance,H.SCALE)}}const O=l(),L=l(),V=g(),C=g(),I=g(),k=Math.PI/2;export{A as ScaleOrientManipulation};