Ejemplo n.º 1
0
        private static LineSymbol cloneLineSymbol(LineSymbol lineSymbol)
        {
            if (lineSymbol == null)
                return null;

            ESRI.ArcGIS.Mapping.Core.Symbols.SimpleLineSymbol mappingSimpleLineSymbol = lineSymbol as ESRI.ArcGIS.Mapping.Core.Symbols.SimpleLineSymbol;
            if (mappingSimpleLineSymbol != null)
            {
                ESRI.ArcGIS.Mapping.Core.Symbols.SimpleLineSymbol ls = new ESRI.ArcGIS.Mapping.Core.Symbols.SimpleLineSymbol()
                {
                    Color = CloneBrush(mappingSimpleLineSymbol.Color),
                    ControlTemplate = mappingSimpleLineSymbol.ControlTemplate,
                    SelectionColor = CloneBrush(mappingSimpleLineSymbol.SelectionColor),
                    Width = mappingSimpleLineSymbol.Width,
                };
                return ls;
            }

            SimpleLineSymbol simpleLineSymbol = lineSymbol as SimpleLineSymbol;
            if (simpleLineSymbol != null)
            {
                SimpleLineSymbol ls = new SimpleLineSymbol()
                {
                    Color = CloneBrush(simpleLineSymbol.Color),
                    ControlTemplate = simpleLineSymbol.ControlTemplate,
                    Style = simpleLineSymbol.Style,
                    Width = simpleLineSymbol.Width,
                };
                return ls;
            }

            CartographicLineSymbol cLineSymbol = lineSymbol as CartographicLineSymbol;
            if (cLineSymbol != null)
            {
                CartographicLineSymbol cs = new CartographicLineSymbol()
                {
                    Color = CloneBrush(cLineSymbol.Color),
                    ControlTemplate = cLineSymbol.ControlTemplate,
                    DashArray = cLineSymbol.DashArray,
                    DashCap = cLineSymbol.DashCap,
                    DashOffset = cLineSymbol.DashOffset,
                    EndLineCap = cLineSymbol.EndLineCap,
                    LineJoin = cLineSymbol.LineJoin,
                    MiterLimit = cLineSymbol.MiterLimit,
                    StartLineCap = cLineSymbol.StartLineCap,
                    Width = cLineSymbol.Width,
                };
                return cs;
            }

            LineSymbol l = new LineSymbol()
            {
                Color = CloneBrush(lineSymbol.Color),
                ControlTemplate = lineSymbol.ControlTemplate,
                Width = lineSymbol.Width,
            };
            return l;
        }
Ejemplo n.º 2
0
        private static LineSymbol cloneLineSymbol(LineSymbol lineSymbol)
        {
            if (lineSymbol == null)
            {
                return(null);
            }

            ESRI.ArcGIS.Mapping.Core.Symbols.SimpleLineSymbol mappingSimpleLineSymbol = lineSymbol as ESRI.ArcGIS.Mapping.Core.Symbols.SimpleLineSymbol;
            if (mappingSimpleLineSymbol != null)
            {
                ESRI.ArcGIS.Mapping.Core.Symbols.SimpleLineSymbol ls = new ESRI.ArcGIS.Mapping.Core.Symbols.SimpleLineSymbol()
                {
                    Color           = CloneBrush(mappingSimpleLineSymbol.Color),
                    ControlTemplate = mappingSimpleLineSymbol.ControlTemplate,
                    SelectionColor  = CloneBrush(mappingSimpleLineSymbol.SelectionColor),
                    Width           = mappingSimpleLineSymbol.Width,
                };
                return(ls);
            }

            SimpleLineSymbol simpleLineSymbol = lineSymbol as SimpleLineSymbol;

            if (simpleLineSymbol != null)
            {
                SimpleLineSymbol ls = new SimpleLineSymbol()
                {
                    Color           = CloneBrush(simpleLineSymbol.Color),
                    ControlTemplate = simpleLineSymbol.ControlTemplate,
                    Style           = simpleLineSymbol.Style,
                    Width           = simpleLineSymbol.Width,
                };
                return(ls);
            }

            CartographicLineSymbol cLineSymbol = lineSymbol as CartographicLineSymbol;

            if (cLineSymbol != null)
            {
                CartographicLineSymbol cs = new CartographicLineSymbol()
                {
                    Color           = CloneBrush(cLineSymbol.Color),
                    ControlTemplate = cLineSymbol.ControlTemplate,
                    DashArray       = cLineSymbol.DashArray,
                    DashCap         = cLineSymbol.DashCap,
                    DashOffset      = cLineSymbol.DashOffset,
                    EndLineCap      = cLineSymbol.EndLineCap,
                    LineJoin        = cLineSymbol.LineJoin,
                    MiterLimit      = cLineSymbol.MiterLimit,
                    StartLineCap    = cLineSymbol.StartLineCap,
                    Width           = cLineSymbol.Width,
                };
                return(cs);
            }

            LineSymbol l = new LineSymbol()
            {
                Color           = CloneBrush(lineSymbol.Color),
                ControlTemplate = lineSymbol.ControlTemplate,
                Width           = lineSymbol.Width,
            };

            return(l);
        }
        /// <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);
        }