示例#1
0
        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);
        }
示例#4
0
        /// <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 ");
                            }
                        }
                    });
                }
            }
        }