Parameters
- snapMode
- isSet
//ensure Midpoint snapping is switched on Snapping.SetSnapMode(SnapMode.Midpoint, true);
layerList = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>(); // configure by layer foreach (var layer in layerList) { // find the state of the snapModes for the layer var lsm = ArcGIS.Desktop.Mapping.Snapping.GetLayerSnapModes(layer); bool vertexOn = lsm.Vertex; // or use vertexOn = lsm.GetSnapMode(SnapMode.Vertex); bool edgeOn = lsm.Edge; // or use edgeOn = lsm.GetSnapMode(SnapMode.Edge); bool endOn = lsm.End; // or use endOn = lsm.GetSnapMode(SnapMode.End); // update a few snapModes // turn Vertex off lsm.SetSnapMode(SnapMode.Vertex, false); // intersections on lsm.SetSnapMode(SnapMode.Intersection, true); // and set back to the layer ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layer, lsm); // assign a single snap mode at once ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layer, SnapMode.Vertex, false); // turn ALL snapModes on ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layer, true); // turn ALL snapModes off ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layer, false); } // configure for a set of layers // set Vertex, edge, end on for a set of layers, other snapModes false var vee = new LayerSnapModes(false); vee.Vertex = true; vee.Edge = true; vee.End = true; ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layerList, vee); // ensure intersection is on for a set of layers without changing any other snapModes // get the layer snapModes for the set of layers var dictLSM = ArcGIS.Desktop.Mapping.Snapping.GetLayerSnapModes(layerList); foreach (var layer in dictLSM.Keys) { var lsm = dictLSM[layer]; lsm.Intersection = true; } ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(dictLSM); // set all snapModes off for a list of layers ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layerList, false);
// interested in only snapping to the vertices of a specific layer of interest and not the vertices of other layers // all other snapModes should be off. // snapping must be on ArcGIS.Desktop.Mapping.Snapping.IsEnabled = true; // turn all application snapModes off //At 2.x - ArcGIS.Desktop.Mapping.Snapping.SetSnapModes(); ArcGIS.Desktop.Mapping.Snapping.SetSnapModes(null); // set application snapMode vertex on ArcGIS.Desktop.Mapping.Snapping.SetSnapMode(SnapMode.Vertex, true); // ensure layer snapping is on await QueuedTask.Run(() => { fLayer.SetSnappable(true); }); // set vertex snapping only var vertexOnly = new LayerSnapModes(false); vertexOnly.Vertex = true; // set vertex only for the specific layer, clearing all others var dict = new Dictionary<Layer, LayerSnapModes>(); dict.Add(fLayer, vertexOnly); ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(dict, true); // true = reset other layers
Target Platforms: Windows 11, Windows 10, Windows 8.1