Exemple #1
0
        public static CIMMarker CreateMarker(CIMColor color, double size, MarkerStyle style)
        {
            var geometry = CreateMarkerGeometry(style);
            var symbol   = CreatePolygonSymbol(color);

            var graphic = new CIMMarkerGraphic {
                Geometry = geometry, Symbol = symbol
            };

            var marker = new CIMVectorMarker();

            marker.ColorLocked                = false;
            marker.Enable                     = true;
            marker.Size                       = size >= 0 ? size : DefaultMarkerSize;
            marker.AnchorPointUnits           = SymbolUnits.Relative;
            marker.BillboardMode3D            = BillboardMode.FaceNearPlane;
            marker.DominantSizeAxis3D         = DominantSizeAxis.Y;
            marker.ScaleSymbolsProportionally = true;
            marker.RespectFrame               = true;
            marker.MarkerGraphics             = new[] { graphic };
            marker.Frame                      = style == MarkerStyle.Circle
                                               ? GeometryFactory.CreateEnvelope(-5, -5, 5, 5)
                                               : graphic.Geometry.Extent;

            return(marker);
        }
        private void SetFramePrimitiveNames(CIMPointSymbol symbol, string key)
        {
            if (symbol == null)
            {
                return;
            }

            // verify that the point symbol has only one vector marker layer

            if (symbol.SymbolLayers == null)
            {
                return;
            }
            if (symbol.SymbolLayers.Length != 1)
            {
                return;
            }
            CIMVectorMarker marker = symbol.SymbolLayers[0] as CIMVectorMarker;

            if (marker == null)
            {
                return;
            }
            if (marker.MarkerGraphics == null)
            {
                return;
            }

            // find the fill marker
            CIMMarkerGraphic fill      = null;
            CIMMarkerGraphic outline   = null;
            double           maxArea   = 0;
            double           maxLength = 0;

            foreach (var graphic in marker.MarkerGraphics)
            {
                if (graphic == null)
                {
                    continue;
                }
                var hasFill   = SymbolUtil.HasFill(graphic.Symbol as CIMMultiLayerSymbol);
                var hasStroke = SymbolUtil.IsStroke(graphic.Symbol as CIMMultiLayerSymbol);
                if (graphic.Geometry is ArcGIS.Core.Geometry.Multipart geom)
                {
                    if (hasFill)
                    {
                        double area = Math.Abs(geom.Area);
                        if (area > maxArea)
                        {
                            maxArea = area;
                            fill    = graphic;
                        }
                    }
                    if (hasStroke)
                    {
                        double length = Math.Abs(geom.Length);
                        if (length > maxLength)
                        {
                            maxLength = length;
                            outline   = graphic;
                        }
                    }
                }
            }

            // add the primitive names
            foreach (var graphic in marker.MarkerGraphics)
            {
                if (graphic == fill)
                {
                    SymbolUtil.SetPrimitiveNames(graphic.Symbol as CIMMultiLayerSymbol, "frame_fill", "frame_outline", false, false);
                }
                else if (graphic == outline)
                {
                    SymbolUtil.SetPrimitiveNames(graphic.Symbol as CIMMultiLayerSymbol, "frame_outline", "frame_outline", false, false);
                }
                else
                {
                    SymbolUtil.SetPrimitiveNames(graphic.Symbol as CIMMultiLayerSymbol, "frame_outline", "frame_outline", false, false);
                }
            }

            ++_updatedSymbols;
        }
        protected async override void OnClick()
        {
            // To use this utility, you need to add the style that you want to update to your ArcGIS Pro project
            // If necessary and not alreadly listed, update the line below to include the name of the style that
            //    you want to update
            // Note: no ".stylx" extension

            List <string> stylxFiles = new List <string>()
            {
                "mil2525d", "mil2525c", "app6b"
            };

            string stylxUpdatedNames = string.Empty;

            foreach (string stylxToUpdateName in stylxFiles)
            {
                StyleProjectItem projectStyleItem = null;
                try
                {
                    projectStyleItem = Project.Current.GetItems <StyleProjectItem>().First(x => x.Name == stylxToUpdateName);
                }
                catch (Exception ex)
                {
                    projectStyleItem = null;
                }

                if (projectStyleItem == null)
                {
                    continue;
                }

                stylxUpdatedNames += stylxToUpdateName + ";";

                //update point symbols
                var ptSymbols = await projectStyleItem.SearchSymbolsAsync(StyleItemType.PointSymbol, "");

                await QueuedTask.Run(() =>
                {
                    foreach (SymbolStyleItem s in ptSymbols)
                    {
                        CIMPointSymbol symbol = (CIMPointSymbol)s.Symbol;

                        if (symbol == null)
                        {
                            continue;
                        }

                        try
                        {
                            var lyrs = symbol.SymbolLayers;

                            foreach (CIMVectorMarker x in lyrs)
                            {
                                if (x.ScaleSymbolsProportionally == false)
                                {
                                    x.ScaleSymbolsProportionally = true;
                                }
                            }
                            symbol.SymbolLayers = lyrs;
                            s.Symbol            = symbol;
                            projectStyleItem.UpdateItem(s);
                        }
                        catch (Exception ex2)
                        {
                        }
                    }
                });

                //update line symbols
                var lineSymbols = await projectStyleItem.SearchSymbolsAsync(StyleItemType.LineSymbol, "");

                await QueuedTask.Run(() =>
                {
                    foreach (SymbolStyleItem s in lineSymbols)
                    {
                        try
                        {
                            if (s.Symbol is CIMLineSymbol)
                            {
                                CIMLineSymbol symbol = (CIMLineSymbol)s.Symbol;
                                var lyrs             = symbol.SymbolLayers;
                                foreach (CIMSymbolLayer lyr in lyrs)
                                {
                                    CIMVectorMarker x = lyr as CIMVectorMarker;
                                    if (x != null)
                                    {
                                        if (x.ScaleSymbolsProportionally == false)
                                        {
                                            x.ScaleSymbolsProportionally = true;
                                        }
                                    }
                                }
                                symbol.SymbolLayers = lyrs;
                                s.Symbol            = symbol;
                            }
                            else if (s.Symbol is CIMPointSymbol)
                            {
                                CIMPointSymbol symbol = (CIMPointSymbol)s.Symbol;
                                var lyrs = symbol.SymbolLayers;
                                foreach (CIMSymbolLayer lyr in lyrs)
                                {
                                    CIMVectorMarker x = lyr as CIMVectorMarker;
                                    if (x != null)
                                    {
                                        if (x.ScaleSymbolsProportionally == false)
                                        {
                                            x.ScaleSymbolsProportionally = true;
                                        }
                                    }
                                }
                                symbol.SymbolLayers = lyrs;
                                s.Symbol            = symbol;
                                s.ItemType          = StyleItemType.LineSymbol;
                            }

                            projectStyleItem.UpdateItem(s);
                        }
                        catch (Exception ex3)
                        {
                        }
                    }
                });

                //update polygon symbols
                var polygonSymbols = await projectStyleItem.SearchSymbolsAsync(StyleItemType.PolygonSymbol, "");

                await QueuedTask.Run(() =>
                {
                    foreach (SymbolStyleItem s in polygonSymbols)
                    {
                        try
                        {
                            if (s.Symbol is CIMPolygonSymbol)
                            {
                                CIMPolygonSymbol symbol = (CIMPolygonSymbol)s.Symbol;
                                var lyrs = symbol.SymbolLayers;
                                foreach (CIMSymbolLayer lyr in lyrs)
                                {
                                    CIMVectorMarker x = lyr as CIMVectorMarker;
                                    if (x != null)
                                    {
                                        if (x.ScaleSymbolsProportionally == false)
                                        {
                                            x.ScaleSymbolsProportionally = true;
                                        }
                                    }
                                }
                                symbol.SymbolLayers = lyrs;
                                s.Symbol            = symbol;
                            }
                            else if (s.Symbol is CIMPointSymbol)
                            {
                                CIMPointSymbol symbol = (CIMPointSymbol)s.Symbol;
                                var lyrs = symbol.SymbolLayers;
                                foreach (CIMSymbolLayer lyr in lyrs)
                                {
                                    CIMVectorMarker x = lyr as CIMVectorMarker;
                                    if (x != null)
                                    {
                                        if (x.ScaleSymbolsProportionally == false)
                                        {
                                            x.ScaleSymbolsProportionally = true;
                                        }
                                    }
                                }
                                symbol.SymbolLayers = lyrs;
                                s.Symbol            = symbol;
                                s.ItemType          = StyleItemType.PolygonSymbol;
                            }

                            projectStyleItem.UpdateItem(s);
                        }
                        catch (Exception ex3)
                        {
                        }
                    }
                });
            } // end foreach

            if (string.IsNullOrEmpty(stylxUpdatedNames))
            {
                string stylxs = string.Join(";", stylxFiles);
                ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Could not find any styles: " + stylxs + " in Project");
            }
            else
            {
                ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Stylx Update DONE, styles updated:" + stylxUpdatedNames);
            }
        } // OnClick