@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 4.13 kB
JavaScript
import{darken as t}from"../../../../../core/colorUtils.js";import e from"../../../../../core/Evented.js";import{clamp as i}from"../../../../../core/mathUtils.js";import{unwrap as r}from"../../../../../core/maybe.js";import{w as a,r as o,k as s}from"../../../../../chunks/mat4.js";import{c as n}from"../../../../../chunks/mat4f64.js";import{j as l,b as c,n as p,e as u,f as m,g as d}from"../../../../../chunks/vec3.js";import{c as h,f}from"../../../../../chunks/vec3f64.js";import{Manipulator3D as _}from"../../Manipulator3D.js";import{createManipulatorMaterial as w}from"../../manipulatorUtils.js";import{RenderObject as j}from"../../RenderObject.js";import{screenToZConstrained as M}from"../dragEventPipeline3D.js";import{ManipulatorType as v}from"../ManipulatorType.js";import{settings as g}from"../settings.js";import{DISC_RADIUS as b}from"./config.js";import{Manipulation as y}from"./Manipulation.js";import{createGraphicMoveDragPipeline as z}from"./moveUtils.js";import{createTubeGeometry as U,createConeGeometry as O}from"../../../webgl-engine/lib/GeometryUtil.js";import{RenderOccludedFlag as P}from"../../../webgl-engine/lib/Material.js";import{createManipulatorDragEventPipeline as E,addScreenDelta as T}from"../../../../interactive/dragEventPipeline.js";import{ManipulatorStateFlags as A}from"../../../../interactive/interfaces.js";class R extends y{constructor(t){super(),this._radius=b,this.events=new e,this._tool=t.tool,this._view=t.view,null!=t.radius&&(this._radius=t.radius),this._createManipulator(),this.forEachManipulator((t=>this._tool.manipulators.add(t)))}destroy(){this.forEachManipulator((t=>{this._tool.manipulators.remove(t),t.destroy()}))}forEachManipulator(t){t(this._manipulator,v.TRANSLATE_Z)}createGraphicDragPipeline(t,e,i){const a=r(e.graphic.geometry).spatialReference;return z(e,i,(e=>this.createDragPipeline(((i,r,a,o,s)=>(({steps:r,cancel:a}=t(i,r,a,o,s)),e(i,r,a))),a)),this._view.state.viewingMode)}createDragPipeline(t,e){const i=this._view;return E(this._manipulator,((r,a,o,s,n)=>{const l=a.next((t=>({...t,manipulatorType:v.TRANSLATE_Z}))).next(M(i,r.renderLocation,e)).next(T());t(r,l,o,s,n)}))}get radius(){return this._radius}set radius(t){t!==this._radius&&(this._radius=t,this._updateManipulator())}_updateManipulator(){const e=this._radius/b,i=g.zManipulator.height*e,r=g.zManipulator.coneHeight*e,l=g.zManipulator.coneWidth*e,c=g.zManipulator.width*e,p=[f(0,0,0),f(0,0,i)],u=[f(0,0,0),f(0,0,i+r)],m=t=>{const e=n();if(a(e,e,[0,0,i]),o(e,e,Math.PI/2),t){const i=1+2*t/l;s(e,e,[i,i,i])}return e},d=m(0),h=(e,i)=>{const r=t(g.zManipulator.color,i);return[r.r/255,r.g/255,r.b/255,g.zManipulator.color.a*e]},_=w(h(1,.25),P.Occlude),M=w(h(1,0),P.Occlude),v=w(h(.7,0),g.zManipulator.renderOccluded),y=w(h(.85,0),g.zManipulator.renderOccluded),z=U(_,p,c/2,16,!1),E=O(_,r,l/2,16,!1);E.transformation=d,this._manipulator.renderObjects=[new j(E,A.Unfocused),new j(z,A.Unfocused),new j(E.instantiate({material:M}),A.Focused),new j(z.instantiate({material:M}),A.Focused),new j(E.instantiate({material:v}),A.Unfocused),new j(z.instantiate({material:v}),A.Unfocused),new j(E.instantiate({material:y}),A.Focused),new j(z.instantiate({material:y}),A.Focused)],this._manipulator.radius=c/2+2,this._manipulator.collisionType={type:"line",paths:[u]}}_createManipulator(){const t=new _({view:this._view,autoScaleRenderObjects:!1,worldSized:!1,selectable:!1,cursor:"ns-resize",elevationInfo:this.elevationInfo,worldOriented:!0,collisionPriority:1.6});t.applyObjectTransform=t=>{const e=this._view.state.camera,r=x;this._view.renderCoordsHelper.toRenderCoords(this._manipulator.elevationAlignedLocation,r);const a=l(e.eye,r),o=e.computeRenderPixelSizeAtDist(a),s=c(D,r,e.eye);p(s,s);const n=k;this._view.renderCoordsHelper.worldUpAtPosition(x,n);const h=Math.abs(u(s,n)),f=m(D,s,n),_=m(D,f,n),w=i(h,.01,1),j=1-Math.sqrt(1-w*w)/w/e.fullWidth,M=this._radius/b,v=g.zManipulator.width*M;d(_,p(_,_),(1/j-1)*a+o*v),t[12]-=D[0],t[13]-=D[1],t[14]-=D[2]},this._manipulator=t,this._updateManipulator()}get test(){return{manipulator:this._manipulator}}}const x=h(),D=h(),k=h();export{R as MoveZManipulation};