private bool CheckSelectionAsync(SelectionSet sel) { //Enable only if we have a selected polyline feature that is editable. if (sel == null || sel.Count != 1) { return(false); } var member = sel.ToDictionary().Keys.FirstOrDefault(); if (member is IDisplayTable displayTable) { var canEdit = displayTable.CanEditData(); if (!canEdit) { return(false); } if (member is not FeatureLayer flayer) { return(false); } if (flayer.ShapeType != ArcGIS.Core.CIM.esriGeometryType.esriGeometryPolyline) { return(false); } return(true); } return(false); }
/// <summary> /// Get all diagram Elements /// </summary> internal static void LoadDiagramFeatures(NetworkDiagram Diagram, out SelectionSet selection) { DiagramElementQueryResult deqr; selection = MapView.Active.Map.GetSelection(); if (selection == null || selection.Count == 0) { DiagramElementQueryByElementTypes query = new DiagramElementQueryByElementTypes { QueryDiagramContainerElement = true, QueryDiagramEdgeElement = true, QueryDiagramJunctionElement = true }; deqr = Diagram.QueryDiagramElements(query); } else { List <long> junctionIDs = new List <long>(); List <long> edgeIDs = new List <long>(); List <long> containerIDs = new List <long>(); foreach (var v in selection.ToDictionary()) { if (v.Key is FeatureLayer layer) { if (layer.ShapeType == ArcGIS.Core.CIM.esriGeometryType.esriGeometryPoint) { junctionIDs.AddRange(v.Value); } else if (layer.ShapeType == ArcGIS.Core.CIM.esriGeometryType.esriGeometryPolygon) { containerIDs.AddRange(v.Value); } else if (layer.ShapeType == ArcGIS.Core.CIM.esriGeometryType.esriGeometryPolyline) { edgeIDs.AddRange(v.Value); } } } DiagramElementQueryByObjectIDs query1 = new DiagramElementQueryByObjectIDs { JunctionObjectIDs = junctionIDs, ContainerObjectIDs = containerIDs, EdgeObjectIDs = edgeIDs }; deqr = Diagram.QueryDiagramElements(query1); } g_DiagramJunctionElements = deqr.DiagramJunctionElements.ToList(); g_DiagramEdgeElements = deqr.DiagramEdgeElements.ToList(); g_DiagramContainerElements = deqr.DiagramContainerElements.ToList(); }
/// <summary> /// Get the selected features GUID from the active map /// </summary> /// <returns>List of GUID</returns> internal static List <Guid> GetSelectedGuidFromActiveMap() { List <Guid> listIds = new List <Guid>(); Map map = MapView.Active.Map; SelectionSet selected = map.GetSelection(); foreach (var v in selected.ToDictionary()) { if (v.Key.GetType() == typeof(FeatureLayer)) { FeatureLayer fl = v.Key as FeatureLayer; Selection sel = fl.GetSelection(); if (sel.SelectionType == ArcGIS.Core.Data.SelectionType.GlobalID) { listIds.AddRange(sel.GetGlobalIDs()); } else { listIds.AddRange(GetGuidFromLayer(fl, sel)); } } else if (v.Key.GetType() == typeof(BasicFeatureLayer)) { BasicFeatureLayer fl = v.Key as BasicFeatureLayer; Selection sel = fl.GetSelection(); if (sel.SelectionType == ArcGIS.Core.Data.SelectionType.GlobalID) { listIds.AddRange(sel.GetGlobalIDs()); } else { listIds.AddRange(GetGuidFromLayer(fl, sel)); } } } return(listIds); }
/// <summary> /// Run the rotate selected junctions /// </summary> /// <param name="rotation">Rotation Angle</param> private void RotateSelectedJunctions(double rotation) { if (MapView.Active != null) { // Get the Network Diagram Layer DiagramLayer diagramLayer = GetDiagramLayerFromMap(MapView.Active.Map); if (diagramLayer != null) { QueuedTask.Run(() => { // Get the Network Diagram NetworkDiagram diagram = diagramLayer.GetNetworkDiagram(); if (diagram != null) { try { List <long> junctionObjectIDs = new List <long>(); // get the selection by Layer SelectionSet selection = MapView.Active.Map.GetSelection(); // Get the selection only for junctions foreach (var v in selection.ToDictionary()) { FeatureLayer featureLayer = v.Key as FeatureLayer; if (featureLayer != null) { if (featureLayer.ShapeType != esriGeometryType.esriGeometryPoint) { continue; } junctionObjectIDs.AddRange(v.Value); } } // if no junction selected, work on all diagram junctions DiagramElementQueryResult result; if (junctionObjectIDs.Count == 0) { DiagramElementQueryByElementTypes query = new DiagramElementQueryByElementTypes { QueryDiagramContainerElement = false, QueryDiagramEdgeElement = false, QueryDiagramJunctionElement = true }; result = diagram.QueryDiagramElements(query); } else { DiagramElementQueryByObjectIDs query = new DiagramElementQueryByObjectIDs { AddConnected = false, AddContents = false, JunctionObjectIDs = junctionObjectIDs }; result = diagram.QueryDiagramElements(query); } List <DiagramJunctionElement> junctionsToSave = new List <DiagramJunctionElement>(); // Set the new Rotation Value foreach (var junction in result.DiagramJunctionElements) { if (_isRelative) { junction.Rotation += rotation; } else { junction.Rotation = rotation; } junctionsToSave.Add(junction); } // Save junctions if needed if (junctionsToSave.Count() > 0) { NetworkDiagramSubset nds = new NetworkDiagramSubset { DiagramEdgeElements = null, DiagramContainerElements = null, DiagramJunctionElements = junctionsToSave }; diagram.SaveLayout(nds, true); MapView.Active.Redraw(true); // re set the selection if (selection.Count > 0) { MapView.Active.Map.SetSelection(selection, SelectionCombinationMethod.New); } } } catch (GeodatabaseException e) { MessageBox.Show(e.Message, "Failed to Rotate Junctions "); } } }); } } }