UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 3.46 kB
import{_ as t}from"../../../../../chunks/tslib.es6.js";import e from"../../../../../core/Accessor.js";import{HandleOwner as i}from"../../../../../core/HandleOwner.js";import{deg2rad as o,rad2deg as r}from"../../../../../core/mathUtils.js";import{isSome as s,isNone as a}from"../../../../../core/maybe.js";import{when as n,sync as c}from"../../../../../core/reactiveUtils.js";import{property as l}from"../../../../../core/accessorSupport/decorators/property.js";import"../../../../../core/accessorSupport/ensureType.js";import"../../../../../core/arrayUtils.js";import{subclass as p}from"../../../../../core/accessorSupport/decorators/subclass.js";import{axis as h,angle as g}from"../../../../../geometry/support/axisAngleDegrees.js";import{ViewingMode as m}from"../../../../ViewingMode.js";import{createGraphicGeometryUndoRecord as u}from"./undoRecords.js";let d=class extends i{constructor(t){super(t),this._interactionState=null}initialize(){this.addHandles([n((()=>s(this._interactionState)&&this._interactionState.angle!==this._interactionState.previousAngle?{interactionState:this._interactionState,angle:this._interactionState.state.angle}:null),(({interactionState:t})=>{this._updateMeshRotation(t)}),c),n((()=>s(this._interactionState)&&this._interactionState.scale!==this._interactionState.previousScale?{interactionState:this._interactionState,scale:this._interactionState.state.scale}:null),(({interactionState:t})=>{this._updateMeshSize(t)}),c)])}get angle(){const t=this.geometry.transform;if(a(t))return 0;const e=h(t.rotation)[2];return Math.abs(e)>.999999?o(g(t.rotation))*Math.sign(e):0}get scale(){return s(this._interactionState)?this._interactionState.scale:1}startInteraction(){const t=new y({angle:this.angle});this._interactionState=t;const e=()=>{this._interactionState=null};return{state:t,done:e,cancel:()=>{t.cancel(),e()}}}createUndoRecord(){return u(this.graphic)}_updateMeshRotation(t){const e=this.geometry.anchor,i=this.viewingMode===m.Global,{angle:o,previousAngle:a}=t;this.geometry.rotate(0,0,r(o-a),{origin:e,geographic:i}),t.previousAngle=o,s(this.geometry.transform)&&this.graphic.notifyMeshTransformChanged(),this.graphic.notifyGeometryChanged()}_updateMeshSize(t){const e=this.geometry.anchor,i=this.viewingMode===m.Global,{scale:o,previousScale:r}=t;this.geometry.scale(o/r,{origin:e,geographic:i}),t.previousScale=o,s(this.geometry.transform)&&this.graphic.notifyMeshTransformChanged(),this.graphic.notifyGeometryChanged()}};t([l({constructOnly:!0})],d.prototype,"graphic",void 0),t([l({constructOnly:!0})],d.prototype,"geometry",void 0),t([l({constructOnly:!0})],d.prototype,"viewingMode",void 0),t([l()],d.prototype,"angle",null),t([l()],d.prototype,"scale",null),t([l()],d.prototype,"_interactionState",void 0),d=t([p("esri.views.3d.interactive.editingTools.transformGraphic.ScaleRotateMeshAdapter")],d);let y=class extends e{get state(){const{angle:t,scale:e}=this;return{angle:t,scale:e}}constructor(t){super(t),this.angle=0,this.initialAngle=0,this.previousAngle=0,this.previousScale=1,this.scale=1,this.initialAngle=t.angle,this.previousAngle=t.angle}cancel(){this.angle=this.initialAngle,this.scale=1}};t([l()],y.prototype,"angle",void 0),t([l()],y.prototype,"initialAngle",void 0),t([l()],y.prototype,"previousAngle",void 0),t([l()],y.prototype,"previousScale",void 0),t([l()],y.prototype,"scale",void 0),t([l()],y.prototype,"state",null),y=t([p("InteractionState")],y);export{d as ScaleRotateMeshAdapter};