UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 5.09 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import e from"../../../Color.js";import{multiplyOpacity as i}from"../../../core/colorUtils.js";import"../../../core/has.js";import{destroyHandle as n}from"../../../core/handleUtils.js";import{m as t}from"../../../chunks/vec32.js";import{create as r}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{projectVectorToVector as o}from"../../../geometry/projection/projectVectorToVector.js";import{onTheGroundElevationInfo as a,absoluteHeightElevationInfo as l}from"../../../support/elevationInfoUtils.js";import{vectorToRender as s}from"./support/viewUtils.js";import{ExtendedLineVisualElement as p,ExtensionType as c}from"./visualElements/ExtendedLineVisualElement.js";import{ParallelLineVisualElement as d}from"./visualElements/ParallelLineVisualElement.js";import{PointVisualElement as m}from"./visualElements/PointVisualElement.js";import{RightAngleQuadVisualElement as u}from"./visualElements/RightAngleQuadVisualElement.js";import{DrapedRenderGroup as f}from"../layers/interfaces.js";import{RenderOccludedFlag as g}from"../webgl-engine/lib/Material.js";import{toDehydratedPoint as v,isTarget as h,withSelfSnappingZ as E}from"../../interactive/sketch/normalizedPoint.js";import{defaults as C}from"../../interactive/snapping/Settings.js";import{SnappingDomain as w}from"../../interactive/snapping/SnappingDomain.js";import{LineSegmentHintType as j}from"../../interactive/snapping/snappingUtils.js";import{SnappingVisualizer as S}from"../../interactive/snapping/SnappingVisualizer.js";import{LineSnappingHint as O}from"../../interactive/snapping/hints/LineSnappingHint.js";class R extends S{sortUniqueHints(e){return e.sort(((e,i)=>(i instanceof O?i.length:0)-(e instanceof O?e.length:0)))}visualizeIntersectionPoint(e,i){const{spatialReference:t,view:r}=i,o=D(i);return n(new m({view:r,primitive:"circle",geometry:v(e.intersectionPoint,t),elevationInfo:e.isDraped?a:l,size:20,outlineSize:2,color:o.intersectionPointColor,outlineColor:o.intersectionPointOutlineColor,pixelSnappingEnabled:!1,isDecoration:!0,attached:!0}))}visualizePoint(e,i){const{view:t,spatialReference:r}=i,o=D(i),a=x(e.point,e.domain,i);return n(new m({view:t,primitive:"circle",geometry:v(a,r),elevationInfo:A(e),size:20,outlineSize:2,color:o.pointColor,outlineColor:o.pointOutlineColor,pixelSnappingEnabled:!1,isDecoration:!0,attached:!0}))}visualizeLine(e,i){const{view:t,spatialReference:r}=i,o=D(i),a=x(e.lineStart,e.domain,i),l=x(e.lineEnd,e.domain,i);return n(H(e.type,a,l,r,A(e),t,o,e.isDraped,e.fadeLeft,e.fadeRight))}visualizeParallelSign(e,i){const{view:r,spatialReference:o}=i,a=D(i),{isDraped:l}=e,s=A(e),p=x(e.lineStart,e.domain,i),c=x(e.lineEnd,e.domain,i),m=z(p,o,s,r,l),u=z(c,o,s,r,l),v=t(u,m,u,.5),h=new d({view:r,attached:!1,offset:C.parallelLineHintOffset,length:C.parallelLineHintLength,width:C.parallelLineHintWidth,color:a.parallelSignColor,location:v,renderOccluded:l?g.OccludeAndTransparent:g.Opaque,isDraped:l,renderGroup:f.SnappingHint,isDecoration:!0});return h.setDirectionFromPoints(m,v),h.attached=!0,n(h)}visualizeRightAngleQuad(e,i){const{view:t,spatialReference:r}=i,o=D(i),a=A(e),{isDraped:l}=e,s=x(e.previousVertex,e.domain,i),p=x(e.centerVertex,e.domain,i),c=x(e.nextVertex,e.domain,i),d=z(s,r,a,t,l),m=z(p,r,a,t,l),v=z(c,r,a,t,l);return n(new u({view:t,attached:!0,color:l?o.rightAngleColorDraped:o.rightAngleColor,renderOccluded:l?g.OccludeAndTransparent:g.Transparent,outlineRenderOccluded:l?g.OccludeAndTransparent:g.Opaque,outlineColor:o.rightAngleOutlineColor,outlineSize:C.rightAngleHintOutlineSize,size:C.rightAngleHintSize,isDraped:l,geometry:{previous:d,center:m,next:v},renderGroup:f.SnappingHint,isDecoration:!0}))}}function D(n){const{effectiveTheme:t}=n.view,r=e.toUnitRGBA(t.accentColor),o=[0,0,0,0];return{intersectionPointColor:o,intersectionPointOutlineColor:r,pointColor:o,pointOutlineColor:r,lineColor:r,lineOutlineColor:void 0,parallelSignColor:r,rightAngleColor:r,rightAngleColorDraped:e.toUnitRGBA(i(t.accentColor,.5)),rightAngleOutlineColor:r}}function x(e,i,{selfSnappingZ:n,view:t,spatialReference:r}){return i&w.SELF&&h(e)&&null!=n?E(e,n,t,r):e}function A(e){return e.isDraped?a:l}function H(e,i,n,t,r,o,a,l=!1,s=!0,d=!0){const m=z(i,t,r,o,l),u=z(n,t,r,o,l),v=new p({view:o,extensionType:c.FADED,start:m,end:u,isDraped:l,color:a.lineColor,renderOccluded:l?g.OccludeAndTransparent:g.Opaque,renderGroup:f.SnappingHint,isDecoration:!0});switch(e){case j.TARGET:v.width=C.lineHintWidthTarget,v.fadedExtensions={start:0,end:C.lineHintFadedExtensions};break;case j.REFERENCE_EXTENSION:v.width=C.lineHintWidthReference,v.fadedExtensions={start:0,end:0};break;case j.REFERENCE:v.width=C.lineHintWidthReference,v.fadedExtensions={start:s?C.lineHintFadedExtensions:0,end:d?C.lineHintFadedExtensions:0}}return v.attached=!0,v}function z(e,i,n,t,a){const l=r();if(a){const n=t.basemapTerrain.overlayManager.renderer.spatialReference;o(e,i,l,n)}else s(e,i,n,t,l);return l}export{R as SnappingVisualizer3D};