/*
All material copyright Esri, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/5.0/esri/copyright.txt for details.
*/
import{on as s}from"../../../../../../core/reactiveUtils.js";import{scale as t}from"../../../../../../core/libs/gl-matrix-2/math/vec2.js";import{i,e as o,j as a,l as e,f as n,n as r,g as p,d,c}from"../../../../../../chunks/vec32.js";import{create as l}from"../../../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{d as u,c as m,u as b}from"../../../../../../chunks/boundedPlane.js";import{fromPositionAndNormal as h,projectPoint as g}from"../../../../../../geometry/support/plane.js";import{sv3d as f}from"../../../../../../geometry/support/vectorStacks.js";import{mainAxis as B}from"../../geometryUtils.js";import{manipulatedObjectGeometry as M}from"../../manipulatedObjectUtils.js";import{evaluateElevationAlignmentAtPoint as y}from"../../../../layers/graphics/elevationAlignmentUtils.js";import{ElevationContext as j}from"../../../../layers/graphics/ElevationContext.js";import{apply as v,applyInverse as _,calculateOrientedBounds as R}from"../../../../../interactive/editGeometry/support/editPlaneUtils.js";import{autoSize2D as x}from"../../../../../support/extentUtils.js";class C{constructor(t,i){this._tool=t,this.mapBounds=u(),this.mapBoundsStart=u(),this.displayBounds=u(),t.addHandles(s(()=>t.object,"modified-externally",()=>this._resetMapBounds(),{onListenerAdd:()=>this._resetMapBounds()})),this._onDisplayBoundsChanged=i}get displayBoundsMargin(){const{view:s,object:t}=this._tool,i=M(t),o=s.pointsOfInterest?.centerOnSurfaceFrequent.location??i?.extent?.center;return o?D*s.pixelSizeAt(o):0}backupMapBounds(){m(this.mapBounds,this.mapBoundsStart)}updateDisplayBounds(){this._calculateDisplayBounds(),this._onDisplayBoundsChanged?.()}updateMapBoundsFromOperation(s){v(s,this.mapBounds),this.updateDisplayBounds()}updateMapBoundsFromOperationInverse(s){_(s,this.mapBounds),this.updateDisplayBounds()}_resetMapBounds(){this._calculateMapBounds(),this.updateDisplayBounds()}_calculateMapBounds(){const{view:s,attachmentOrigin:i,object:o}=this._tool,a=o.operations?.data;if(!a)return;const e=a.geometry;this.spatialReference=e.spatialReference;const n=B(e);t(n,n,-1);const r=i?s.pixelSizeAt(i,e.spatialReference):0,p=O*r,d=a.coordinateHelper.hasZ()&&"on-the-ground"!==o.elevationInfo.mode;R(n,a,p,this.mapBounds,d)}_calculateDisplayBounds(){const{view:s,attachmentOrigin:t}=this._tool,i=t?.z??y(this.mapBounds.origin,s.elevationProvider,j.fromElevationInfo(this._tool.object.elevationInfo),s.renderCoordsHelper);U(this.mapBounds,i??0,s.renderCoordsHelper,this.spatialReference,this.displayBoundsMargin,this.displayBounds)}}const D=10,O=80;function U(s,t,c,l,m=0,B){B||(B=u());const M=f.get();i(M,s.origin,s.basis1),i(M,M,s.basis2),c.toRenderCoords(M,l,M);const y=f.get();i(y,s.origin,s.basis1),o(y,y,s.basis2),c.toRenderCoords(y,l,y);const j=f.get();o(j,s.origin,s.basis1),o(j,j,s.basis2),c.toRenderCoords(j,l,j);const v=f.get();o(v,s.origin,s.basis1),i(v,v,s.basis2),c.toRenderCoords(v,l,v),i(B.origin,M,y),i(B.origin,B.origin,j),i(B.origin,B.origin,v),a(B.origin,B.origin,.25),o(M,M,B.origin),o(y,y,B.origin),o(j,j,B.origin),o(v,v,B.origin);const _=e(f.get(),M,y,.5),R=e(f.get(),j,v,.5);a(R,R,-1),e(B.basis1,_,R,.5);const x=e(f.get(),M,v,.5),C=e(f.get(),y,j,.5);a(C,C,-1),e(B.basis2,x,C,.5);const D=n(f.get(),B.basis1,B.basis2);n(B.basis2,D,B.basis1),r(B.basis1,B.basis1);const O=Math.max(Math.abs(p(B.basis1,M)),Math.abs(p(B.basis1,y)),Math.abs(p(B.basis1,j)),Math.abs(p(B.basis1,v)));r(B.basis2,B.basis2);const U=Math.max(Math.abs(p(B.basis2,M)),Math.abs(p(B.basis2,y)),Math.abs(p(B.basis2,j)),Math.abs(p(B.basis2,v)));a(B.basis1,B.basis1,O+m),a(B.basis2,B.basis2,U+m);const S=d(f.get(),s.origin);return S[2]=t,c.toRenderCoords(S,l,S),h(S,D,B.plane),g(B.plane,B.origin,B.origin),b(B),B}function S(s,t,i,a){return o(H,o(H,s.origin,s.basis1),s.basis2),c(A,H,s.basis1,2),c(k,A,s.basis2,2),c(I,H,s.basis2,2),H[2]=A[2]=k[2]=I[2]=t,x({topLeft:I,topRight:k,bottomRight:A,bottomLeft:H,spatialReference:i,automaticLengthMeasurementUtils:a})}const I=l(),k=l(),A=l(),H=l();export{C as TransformBounds,S as mapPlaneAutoSize2D};
