Exemplo n.º 1
0
        private static FillSymbol cloneFillSymbol(FillSymbol fillSymbol)
        {
            if (fillSymbol == null)
            {
                return(null);
            }

            ESRI.ArcGIS.Mapping.Core.Symbols.SimpleFillSymbol mappingFillSymbol = fillSymbol as ESRI.ArcGIS.Mapping.Core.Symbols.SimpleFillSymbol;
            if (mappingFillSymbol != null)
            {
                ESRI.ArcGIS.Mapping.Core.Symbols.SimpleFillSymbol sfs = new ESRI.ArcGIS.Mapping.Core.Symbols.SimpleFillSymbol()
                {
                    BorderBrush     = CloneBrush(mappingFillSymbol.BorderBrush),
                    BorderThickness = mappingFillSymbol.BorderThickness,
                    ControlTemplate = mappingFillSymbol.ControlTemplate,
                    Fill            = CloneBrush(mappingFillSymbol.Fill),
                    SelectionColor  = CloneBrush(mappingFillSymbol.SelectionColor),
                };
                return(sfs);
            }

            SimpleFillSymbol simpleFillSymbol = fillSymbol as SimpleFillSymbol;

            if (simpleFillSymbol != null)
            {
                SimpleFillSymbol sfs = new SimpleFillSymbol()
                {
                    BorderBrush     = CloneBrush(simpleFillSymbol.BorderBrush),
                    BorderThickness = simpleFillSymbol.BorderThickness,
                    ControlTemplate = simpleFillSymbol.ControlTemplate,
                    Fill            = CloneBrush(simpleFillSymbol.Fill),
                };
                return(sfs);
            }

            PictureFillSymbol pictureFillSymbol = fillSymbol as PictureFillSymbol;

            if (pictureFillSymbol != null)
            {
                PictureFillSymbol pfs = new PictureFillSymbol()
                {
                    BorderBrush     = CloneBrush(pictureFillSymbol.BorderBrush),
                    BorderThickness = pictureFillSymbol.BorderThickness,
                    ControlTemplate = pictureFillSymbol.ControlTemplate,
                    Fill            = CloneBrush(pictureFillSymbol.Fill),
                    Source          = pictureFillSymbol.Source,
                };
                return(pfs);
            }

            FillSymbol fs = new FillSymbol()
            {
                BorderBrush     = CloneBrush(fillSymbol.BorderBrush),
                BorderThickness = fillSymbol.BorderThickness,
                ControlTemplate = fillSymbol.ControlTemplate,
                Fill            = CloneBrush(fillSymbol.Fill),
            };

            return(fs);
        }
        /// <summary>
        /// Converts symbol to string containing JSON object defining a symbol
        /// </summary>
        /// <param name="symbol">Symbol</param>
        /// <returns>String</returns>
        public static String SymbolToJsonString(Symbol symbol)
        {
            if (symbol is IJsonSerializable)
            {
                return((symbol as IJsonSerializable).ToJson());
            }
            string jstr = string.Empty;

            System.Text.StringBuilder sb = new System.Text.StringBuilder();

            #region Mapping.Core Symbols
            // ImageFillSymbol to esriPMS type
            #region
            ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol imgsymb = symbol as ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol;
            if (imgsymb != null)
            {
                double size    = imgsymb.Size;
                double xoffset = (size * imgsymb.OriginX) - size / 2;
                double yoffset = (size * imgsymb.OriginY) - size / 2;
                sb.AppendFormat("{0} \"type\" : \"esriPMS\", \"url\" : \"{2}\", ", "{", "}", imgsymb.Source);
                sb.AppendFormat("\"width\" : {0}, \"height\" : {0}, \"xoffset\" : {1}, \"yoffset\" : {2}", size, xoffset, yoffset);
                //sb.Append(", \"contentType\" : \"image/png\", \"angle\" : 0, \"color\" : null");
                sb.Append(" }");
                return(sb.ToString());
            }
            #endregion
            // SimpleLineSymbol to esriSLS type
            #region
            ESRI.ArcGIS.Mapping.Core.Symbols.SimpleLineSymbol lsymb = symbol as ESRI.ArcGIS.Mapping.Core.Symbols.SimpleLineSymbol;
            if (lsymb != null)
            {
                SolidColorBrush lbrush = lsymb.Color as SolidColorBrush;
                if (lbrush != null)
                {
                    Color  lcolor    = lbrush.Color;
                    string lcolorstr = string.Format("[{0},{1},{2},{3}]", lcolor.R, lcolor.G, lcolor.B, lcolor.A);
                    sb.AppendFormat("{0} \"type\" : \"esriSLS\", \"style\" : \"esriSLSSolid\",", "{", "}");
                    sb.AppendFormat(" \"color\" : {0}, \"width\": {1}", lcolorstr, lsymb.Width);
                    sb.Append(" }");
                    return(sb.ToString());
                }
            }
            #endregion
            // CartographicLineSymbol to esriSLS type
            #region
            ESRI.ArcGIS.Mapping.Core.Symbols.CartographicLineSymbol clsymb = symbol as ESRI.ArcGIS.Mapping.Core.Symbols.CartographicLineSymbol;
            if (clsymb != null)
            {
                SolidColorBrush clbrush = clsymb.Color as SolidColorBrush;
                if (clbrush != null)
                {
                    Color  clcolor    = clbrush.Color;
                    string clcolorstr = string.Format("[{0},{1},{2},{3}]", clcolor.R, clcolor.G, clcolor.B, clcolor.A);
                    if (clsymb.DashArray.Count > 0)
                    {
                        System.Text.StringBuilder sb2 = new System.Text.StringBuilder();
                        string cltype = "esriSLSDot";
                        foreach (double dashdouble in clsymb.DashArray)
                        {
                            if (sb2.Length > 0)
                            {
                                sb2.Append(" ");
                            }
                            sb2.AppendFormat("{0}", dashdouble);
                        }
                        switch (sb2.ToString())
                        {
                        case "1 1":     // Dot

                            break;

                        case "2 1":     // Dash
                            cltype = "esriSLSDash";
                            break;

                        case "2 1 1 1":     // DashDot
                            cltype = "esriSLSDashDot";
                            break;

                        case "2 1 1 1 1 1":     // DashDotDot
                            cltype = "esriSLSDashDotDot";
                            break;
                        }

                        sb.AppendFormat("{0} \"type\" : \"esriSLS\", \"style\" : \"{2}\",", "{", "}", cltype);
                        sb.AppendFormat(" \"color\" : {0}, \"width\": {1}", clcolorstr, clsymb.Width);
                        sb.Append(" }");
                    }
                }
                return(sb.ToString());
            }
            #endregion
            // SimpleFillSymbol to esriSFS type
            #region
            ESRI.ArcGIS.Mapping.Core.Symbols.SimpleFillSymbol fsymb = symbol as ESRI.ArcGIS.Mapping.Core.Symbols.SimpleFillSymbol;
            if (fsymb != null)
            {
                SolidColorBrush brush = fsymb.Fill as SolidColorBrush;
                if (brush != null)
                {
                    Color  color    = brush.Color;
                    string colorstr = string.Format("[{0},{1},{2},{3}]", color.R, color.G, color.B, color.A);
                    sb.AppendFormat("{0} \"type\" : \"esriSFS\", \"style\" : \"esriSFSSolid\",", "{");
                    sb.AppendFormat(" \"color\" : {0}", colorstr);
                    if (fsymb.BorderBrush != null)
                    {
                        SolidColorBrush olbrush    = fsymb.BorderBrush as SolidColorBrush;
                        Color           olcolor    = olbrush.Color;
                        string          olcolorstr = string.Format("[{0},{1},{2},{3}]", olcolor.R, olcolor.G, olcolor.B, olcolor.A);
                        sb.AppendFormat(", \"outline\" : {0} \"type\" : \"esriSLS\", \"style\" : \"esriSLSSolid\", \"color\" : {2}, \"width\" : {3} {1}", "{", "}", olcolorstr, FromPixelsToPoints(fsymb.BorderThickness));
                    }
                    sb.Append(" }");
                }
                return(sb.ToString());
            }
            #endregion
            #endregion
            return(jstr);
        }
Exemplo n.º 3
0
        private static FillSymbol cloneFillSymbol(FillSymbol fillSymbol)
        {
            if (fillSymbol == null)
                return null;

            ESRI.ArcGIS.Mapping.Core.Symbols.SimpleFillSymbol mappingFillSymbol = fillSymbol as ESRI.ArcGIS.Mapping.Core.Symbols.SimpleFillSymbol;
            if (mappingFillSymbol != null)
            {
                ESRI.ArcGIS.Mapping.Core.Symbols.SimpleFillSymbol sfs = new ESRI.ArcGIS.Mapping.Core.Symbols.SimpleFillSymbol()
                {
                    BorderBrush = CloneBrush(mappingFillSymbol.BorderBrush),
                    BorderThickness = mappingFillSymbol.BorderThickness,
                    ControlTemplate = mappingFillSymbol.ControlTemplate,
                    Fill = CloneBrush(mappingFillSymbol.Fill),
                    SelectionColor = CloneBrush(mappingFillSymbol.SelectionColor),
                };
                return sfs;
            }

            SimpleFillSymbol simpleFillSymbol = fillSymbol as SimpleFillSymbol;
            if (simpleFillSymbol != null)
            {
                SimpleFillSymbol sfs = new SimpleFillSymbol()
                {
                    BorderBrush = CloneBrush(simpleFillSymbol.BorderBrush),
                    BorderThickness = simpleFillSymbol.BorderThickness,
                    ControlTemplate = simpleFillSymbol.ControlTemplate,
                    Fill = CloneBrush(simpleFillSymbol.Fill),
                };
                return sfs;
            }

            PictureFillSymbol pictureFillSymbol = fillSymbol as PictureFillSymbol;
            if (pictureFillSymbol != null)
            {
                PictureFillSymbol pfs = new PictureFillSymbol()
                {
                    BorderBrush = CloneBrush(pictureFillSymbol.BorderBrush),
                    BorderThickness = pictureFillSymbol.BorderThickness,
                    ControlTemplate = pictureFillSymbol.ControlTemplate,
                    Fill = CloneBrush(pictureFillSymbol.Fill),
                    Source = pictureFillSymbol.Source,
                };
                return pfs;
            }

            FillSymbol fs = new FillSymbol()
            {
                BorderBrush = CloneBrush(fillSymbol.BorderBrush),
                BorderThickness = fillSymbol.BorderThickness,
                ControlTemplate = fillSymbol.ControlTemplate,
                Fill = CloneBrush(fillSymbol.Fill),
            };
            return fs;
        }