/* COPYRIGHT Esri - https://js.arcgis.com/5.0.18/LICENSE.txt */
import{multiplyOpacity as e}from"../../../core/colorUtils.js";import{destroyHandle as i,makeHandle as n}from"../../../core/handleUtils.js";import{lerp as t}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{create as o}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{projectVectorToVector as r}from"../../../geometry/projection/projectVectorToVector.js";import{onTheGroundElevationInfo as l,absoluteHeightElevationInfo as a}from"../../../support/elevationInfoUtils.js";import{vectorToRender as s}from"./support/viewUtils.js";import{ExtendedLineVisualElement as c}from"./visualElements/ExtendedLineVisualElement.js";import{ParallelLineVisualElement as d}from"./visualElements/ParallelLineVisualElement.js";import{PointVisualElement as p}from"./visualElements/PointVisualElement.js";import{RightAngleQuadVisualElement as u}from"./visualElements/RightAngleQuadVisualElement.js";import{toDehydratedPoint as m,isTarget as f,withSelfSnappingZ as g}from"../../interactive/sketch/normalizedPoint.js";import{defaults as v}from"../../interactive/snapping/Settings.js";import{SnappingVisualizer as h}from"../../interactive/snapping/SnappingVisualizer.js";import{LineSnappingHint as C}from"../../interactive/snapping/hints/LineSnappingHint.js";class w extends h{sortUniqueHints(e){return e.sort((e,i)=>(i instanceof C?i.length:0)-(e instanceof C?e.length:0))}visualizeIntersectionPoint(e,n){const{spatialReference:t,view:o}=n,r=x(n);return i(new p({view:o,primitive:"circle",geometry:m(e.intersectionPoint,t),elevationInfo:e.isDraped?l:a,size:20,outlineSize:2,color:r.intersectionPointColor,outlineColor:r.intersectionPointOutlineColor,pixelSnappingEnabled:!1,isDecoration:!0,attached:!0}))}visualizePoint(e,n){const{view:t,spatialReference:o}=n,r=x(n),l=E(e.point,e.domain,n);return i(new p({view:t,primitive:"circle",geometry:m(l,o),elevationInfo:j(e),size:20,outlineSize:2,color:r.pointColor,outlineColor:r.pointOutlineColor,pixelSnappingEnabled:!1,isDecoration:!0,attached:!0}))}visualizeLine(e,n){const{view:t,spatialReference:o}=n,r=x(n),l=E(e.lineStart,e.domain,n),a=E(e.lineEnd,e.domain,n);return i(z(e.type,l,a,o,j(e),t,r,e.isDraped,e.fadeLeft,e.fadeRight))}visualizeCurve(e,i){return n()}visualizeParallelSign(e,n){const{view:o,spatialReference:r}=n,l=x(n),{isDraped:a}=e,s=j(e),c=E(e.lineStart,e.domain,n),p=E(e.lineEnd,e.domain,n),u=D(c,r,s,o,a),m=D(p,r,s,o,a),f=t(m,u,m,.5),g=new d({view:o,attached:!1,offset:v.parallelLineHintOffset,length:v.parallelLineHintLength,width:v.parallelLineHintWidth,color:l.parallelSignColor,location:f,renderOccluded:a?4:16,isDraped:a,renderGroup:3,isDecoration:!0});return g.setDirectionFromPoints(u,f),g.attached=!0,i(g)}visualizeRightAngleQuad(e,n){const{view:t,spatialReference:o}=n,r=x(n),l=j(e),{isDraped:a}=e,s=E(e.previousVertex,e.domain,n),c=E(e.centerVertex,e.domain,n),d=E(e.nextVertex,e.domain,n),p=D(s,o,l,t,a),m=D(c,o,l,t,a),f=D(d,o,l,t,a);return i(new u({view:t,attached:!0,color:a?r.rightAngleColorDraped:r.rightAngleColor,renderOccluded:a?4:2,outlineRenderOccluded:a?4:16,outlineColor:r.rightAngleOutlineColor,outlineSize:v.rightAngleHintOutlineSize,size:v.rightAngleHintSize,isDraped:a,geometry:{previous:p,center:m,next:f},renderGroup:3,isDecoration:!0}))}}function x(i){const{effectiveTheme:n}=i.view,t=n.accentColor.toUnitRGBA(),o=[0,0,0,0];return{intersectionPointColor:o,intersectionPointOutlineColor:t,pointColor:o,pointOutlineColor:t,lineColor:t,lineOutlineColor:void 0,parallelSignColor:t,rightAngleColor:t,rightAngleColorDraped:e(n.accentColor,.5).toUnitRGBA(),rightAngleOutlineColor:t}}function E(e,i,{selfSnappingZ:n,view:t,spatialReference:o}){return 2&i&&f(e)&&null!=n?g(e,n,t,o):e}function j(e){return e.isDraped?l:a}function z(e,i,n,t,o,r,l,a=!1,s=!0,d=!0){const p=D(i,t,o,r,a),u=D(n,t,o,r,a),m=new c({view:r,extensionType:3,start:p,end:u,isDraped:a,color:l.lineColor,renderOccluded:a?4:16,renderGroup:3,isDecoration:!0});switch(e){case 0:m.width=v.lineHintWidthTarget,m.fadedExtensions={start:0,end:v.lineHintFadedExtensions};break;case 2:m.width=v.lineHintWidthReference,m.fadedExtensions={start:0,end:0};break;case 1:m.width=v.lineHintWidthReference,m.fadedExtensions={start:s?v.lineHintFadedExtensions:0,end:d?v.lineHintFadedExtensions:0}}return m.attached=!0,m}function D(e,i,n,t,l){const a=o();if(l){const n=t.overlayManager.spatialReference;r(e,i,a,n)}else s(e,i,n,t,a);return a}export{w as SnappingVisualizer3D};
