UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 5.27 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import e from"../../../Graphic.js";import{makeHandle as t}from"../../../core/handleUtils.js";import{px2pt as r}from"../../../core/screenUtils.js";import{ensureClass as i}from"../../../core/accessorSupport/ensureType.js";import{subtract as o,cross as n}from"../../../core/libs/gl-matrix-2/math/vec2.js";import{create as a}from"../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{create as l}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import s from"../../../geometry/Point.js";import m from"../../../geometry/Polyline.js";import c from"../../../geometry/SpatialReference.js";import p from"../../../symbols/CIMSymbol.js";import y from"../../../symbols/SimpleLineSymbol.js";import g from"../../../symbols/SimpleMarkerSymbol.js";import{LineJoinStyle as h,LineCapStyle as b}from"../../../symbols/cim/enums.js";import{asVec2 as S}from"../../interactive/sketch/normalizedPoint.js";import{defaults as f}from"../../interactive/snapping/Settings.js";import{SnappingVisualizer as u}from"../../interactive/snapping/SnappingVisualizer.js";class d extends u{constructor(e){super(),this._graphicsLayer=e,this._symbolPairingsByType=new Map}visualizeIntersectionPoint(e,t){return this._visualizeSnappingIndicator(new s({x:e.intersectionPoint[0],y:e.intersectionPoint[1],spatialReference:t.spatialReference}),this._getOrCreateSymbol("intersectionPoint",t.view.effectiveTheme.accentColor))}visualizePoint(e,t){return this._visualizeSnappingIndicator(new s({x:e.point[0],y:e.point[1],spatialReference:t.spatialReference}),this._getOrCreateSymbol("point",t.view.effectiveTheme.accentColor))}visualizeLine(e,t){return this._visualizeSnappingIndicator(new m({paths:[[[...e.lineStart],[...e.lineEnd]]],spatialReference:i(c,t.spatialReference)}),this._getOrCreateSymbol("line",t.view.effectiveTheme.accentColor))}visualizeParallelSign(e,t){return this._visualizeSnappingIndicator(new m({paths:[[[...e.lineStart],[...e.lineEnd]]],spatialReference:i(c,t.spatialReference)}),this._getOrCreateSymbol("parallelSign",t.view.effectiveTheme.accentColor))}visualizeRightAngleQuad(e,t){const r=a(),s=a(),p=l();o(r,S(e.centerVertex),S(e.previousVertex)),o(s,S(e.nextVertex),S(e.previousVertex)),n(p,r,s);const y=`rightAngleQuad${p[2]<0?45:225}`;return this._visualizeSnappingIndicator(new m({paths:[[[...e.previousVertex],[...e.centerVertex],[...e.nextVertex]]],spatialReference:i(c,t.spatialReference)}),this._getOrCreateSymbol(y,t.view.effectiveTheme.accentColor))}_visualizeSnappingIndicator(r,i){const o=new e({geometry:r,symbol:i});return this._graphicsLayer.add(o),t((()=>{this._graphicsLayer.remove(o)}))}_getOrCreateSymbol(e,t){const r=this._symbolPairingsByType;return r.get(e)?.color!==t&&r.set(e,{color:t,symbol:M(e,t)}),r.get(e).symbol}}function M(e,t){const i=[...t.toRgb(),255*t.a];switch(e){case"point":return new g({outline:{width:.5,color:[0,0,0,1]},size:10,color:t});case"intersectionPoint":return new g({outline:new y({width:1.5,color:t}),size:15,color:[0,0,0,0]});case"line":return new p({data:{type:"CIMSymbolReference",symbol:{type:"CIMLineSymbol",symbolLayers:[{type:"CIMSolidStroke",enable:!0,capStyle:b.Butt,joinStyle:h.Round,miterLimit:10,width:r(f.lineHintWidthTarget),color:i}]}}});case"parallelSign":return new p({data:{type:"CIMSymbolReference",symbol:{type:"CIMLineSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,anchorPoint:{x:0,y:-1,z:0},anchorPointUnits:"Relative",size:5,markerPlacement:{type:"CIMMarkerPlacementOnLine",placePerPart:!0,angleToLine:!0,relativeTo:"LineMiddle"},frame:{xmin:-5,ymin:-1.5,xmax:5,ymax:1.5},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{rings:[[[7,0],[-7,0],[-7,1.5],[7,1.5]]]},symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:i}]}}],scaleSymbolsProportionally:!0,respectFrame:!0},{type:"CIMVectorMarker",enable:!0,anchorPoint:{x:0,y:1,z:0},anchorPointUnits:"Relative",size:5,markerPlacement:{type:"CIMMarkerPlacementOnLine",placePerPart:!0,angleToLine:!0,relativeTo:"LineMiddle"},frame:{xmin:-5,ymin:-1.5,xmax:5,ymax:1.5},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{rings:[[[7,0],[-7,0],[-7,-1.5],[7,-1.5]]]},symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:i}]}}],scaleSymbolsProportionally:!0,respectFrame:!0}]}}});case"rightAngleQuad45":case"rightAngleQuad225":{const o="rightAngleQuad45"===e?45:225;return new p({data:{type:"CIMSymbolReference",symbol:{type:"CIMLineSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,anchorPoint:{x:.5,y:.5,z:0},anchorPointUnits:"Relative",size:r(f.rightAngleHintSize),rotation:o,markerPlacement:{type:"CIMMarkerPlacementOnVertices",placePerPart:!0,angleToLine:!0,placeOnEndPoints:!1},frame:{xmin:-5,ymin:-5,xmax:5,ymax:5},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{paths:[[[5,-5],[-5,-5],[-5,5],[5,5],[5,-5]]]},symbol:{type:"CIMLineSymbol",symbolLayers:[{type:"CIMSolidStroke",enable:!0,capStyle:"Butt",joinStyle:"Round",miterLimit:10,width:r(f.rightAngleHintOutlineSize),color:i},{type:"CIMSolidFill",enable:!0,color:[...t.toRgb(),255*t.a*.4]}]}}],scaleSymbolsProportionally:!0,respectFrame:!0}]}}})}}}export{d as SnappingVisualizer2D};