/// <summary>
        /// Creates a symbol compatible with Application Framework from JSON object
        /// </summary>
        /// <param name="jsonObject">JSON object defining a symbol</param>
        /// <returns>Symbol</returns>
        public static Symbol SymbolFromJson(JsonObject jsonObject)
        {
            Symbol symb = null;

            if (jsonObject != null)
            {
                string symbType = jsonObject["type"];
                if (!string.IsNullOrEmpty(symbType))
                {
                    switch (symbType)
                    {
                    case "esriPMS":    // REST defined PictureMarkerSymbol --> output: ImageFillSymbol
                        #region
                        ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol imgsymb = new ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol();
                        double size = 64;     // standard size of images used for Viewer symbols
                        if (jsonObject.ContainsKey("width") || jsonObject.ContainsKey("height"))
                        {
                            // Get the greater of the width or height, converting from points to pixels in the process
                            var pointsToPixelsFactor = 4d / 3d;
                            var width  = jsonObject.ContainsKey("width") ? jsonObject["width"] * pointsToPixelsFactor : 0;
                            var height = jsonObject.ContainsKey("height") ? jsonObject["height"] * pointsToPixelsFactor : 0;
                            size = width > height ? width : height;
                        }
                        imgsymb.Size = size;
                        if (jsonObject.ContainsKey("xoffset"))
                        {
                            imgsymb.OriginX = (size / 2 + jsonObject["xoffset"]) / size;
                        }
                        if (jsonObject.ContainsKey("yoffset"))
                        {
                            imgsymb.OriginY = (size / 2 + jsonObject["yoffset"]) / size;
                        }
                        if (jsonObject.ContainsKey("imageData"))
                        {
                            imgsymb.ImageData = jsonObject["imageData"];
                        }
                        else if (jsonObject.ContainsKey("url"))
                        {
                            imgsymb.Source = jsonObject["url"];
                        }

                        var fill = imgsymb.Fill as ImageBrush;
                        if (fill != null)
                        {
                            fill.Stretch = Stretch.Uniform;
                        }

                        symb = imgsymb;
                        break;

                        #endregion
                    default:
                        // all other REST defined cases
                        symb = Symbol.FromJson(jsonObject.ToString());
                        break;
                    }
                }
            }
            return(symb);
        }
Ejemplo n.º 2
0
        }         // public string getAGSMapServiceUrl()

        /// <summary>
        /// Create and add to map a simple graphics layer, or return existed GL
        /// </summary>
        /// <returns>redline layer</returns>
        public static GraphicsLayer makeRLLayer(Map map, string layerID, string layerName)
        {
            if (map != null)
            {
                var graphicsLayer = map.Layers[layerID] as GraphicsLayer;
                if (graphicsLayer != null)
                {
                    string.Format("VLayer.makeRLLayer, layer already exists, id '{0}'", layerID).clog();
                    return(graphicsLayer);
                }
            }

            string.Format("VLayer.makeRLLayer, create new GraphicsLayer, id '{0}'", layerID).clog();
            // don't react on hover
            var symbPMS = new PictureMarkerSymbol()
            {
                Height  = 28,
                Width   = 28,
                OffsetX = 14,
                OffsetY = 28,
                Source  = new System.Windows.Media.Imaging.BitmapImage(
                    new Uri("/Images/MarkerSymbols/Basic/RedTag.png", UriKind.RelativeOrAbsolute))
            };
            // react on hover
            var symbIFS = new ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol()
            {
                Source = "/Images/MarkerSymbols/Basic/RedTag.png",
                //OffsetX = 14, OffsetY = 28,
                Size    = 28,
                OriginX = 0.5, OriginY = 1
            };

            var gl = new GraphicsLayer()
            {
                ID       = layerID,
                Renderer = new SimpleRenderer()
                {
                    Symbol = symbIFS                     // new SimpleMarkerSymbol()
                },
                RendererTakesPrecedence = false
            };

            //ESRI.ArcGIS.Client.Extensibility.LayerProperties.SetIsPopupEnabled(gl, false);

            // Set layer name in Map Contents
            //gl.SetValue(MapApplication.LayerNameProperty, lyrName);
            //* Remove the line that says "wmsLayer.SetValue(MapApplication.LayerNameProperty, layerName);" and replace it with "MapApplication.SetLayerName(wmsLayer, layerName);"
            //* http://forums.arcgis.com/threads/51206-Adding-WMS-Service?p=178500&viewfull=1#post178500
            //MapApplication.SetLayerName(gl, lyrName);

            if (map != null)
            {
                gl.Initialize();
                map.Layers.Add(gl);
                MapApplication.SetLayerName(gl, layerName);
            }
            return(gl);
        } // public static GraphicsLayer makeRLLayer(Map map, string layerID, string layerName)
        /// <summary>
        /// Creates a symbol compatible with Application Framework from JSON object
        /// </summary>
        /// <param name="jsonObject">JSON object defining a symbol</param>
        /// <returns>Symbol</returns>
        public static Symbol SymbolFromJson(JsonObject jsonObject)
        {
            Symbol symb = null;
            if (jsonObject != null)
            {
                string symbType = jsonObject["type"];
                if (!string.IsNullOrEmpty(symbType))
                {
                    switch (symbType)
                    {
                        case "esriPMS":// REST defined PictureMarkerSymbol --> output: ImageFillSymbol 
                            #region
                            ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol imgsymb = new ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol();
                            double size = 64; // standard size of images used for Viewer symbols
                            if (jsonObject.ContainsKey("width") || jsonObject.ContainsKey("height"))
                            {
                                // Get the greater of the width or height, converting from points to pixels in the process
                                var pointsToPixelsFactor = 4d / 3d;
                                var width = jsonObject.ContainsKey("width") ? jsonObject["width"] * pointsToPixelsFactor : 0;
                                var height = jsonObject.ContainsKey("height") ? jsonObject["height"] * pointsToPixelsFactor : 0;
                                size = width > height ? width : height;
                            }
                            imgsymb.Size = size;
                            if (jsonObject.ContainsKey("xoffset"))
                                imgsymb.OriginX = (size /2 + jsonObject["xoffset"]) / size;
                            if (jsonObject.ContainsKey("yoffset"))
                                imgsymb.OriginY = (size / 2 + jsonObject["yoffset"]) / size;
                            if (jsonObject.ContainsKey("imageData"))
                                imgsymb.ImageData = jsonObject["imageData"];
                            else if (jsonObject.ContainsKey("url"))
                                imgsymb.Source = jsonObject["url"];

                            var fill = imgsymb.Fill as ImageBrush;
                            if (fill != null)
                                fill.Stretch = Stretch.Uniform;

                            symb = imgsymb;
                            break;
                            #endregion
                        default:
                            // all other REST defined cases
                            symb = Symbol.FromJson(jsonObject.ToString());
                            break;
                    }
                }
            }
            return symb;
        }
        /// <summary>
        /// Creates a symbol compatible with Application Framework from JSON object
        /// </summary>
        /// <param name="jsonObject">JSON object defining a symbol</param>
        /// <returns>Symbol</returns>
        public static Symbol SymbolFromJson(JsonObject jsonObject)
        {
            Symbol symb = null;
            if (jsonObject != null)
            {
                string symbType = jsonObject["type"];
                if (!string.IsNullOrEmpty(symbType))
                {
                    switch (symbType)
                    {
                        case "esriPMS":// REST defined PictureMarkerSymbol --> output: ImageFillSymbol 
                            #region
                            ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol imgsymb = new ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol();
                            double size = 64; // standard size of images used for Viewer symbols
                            if (jsonObject.ContainsKey("width"))
                                size = jsonObject["width"];
                            imgsymb.Size = size;
                            if (jsonObject.ContainsKey("xoffset"))
                                imgsymb.OriginX = (size /2 + jsonObject["xoffset"]) / size;
                            if (jsonObject.ContainsKey("yoffset"))
                                imgsymb.OriginY = (size / 2 + jsonObject["yoffset"]) / size;
                            if (jsonObject.ContainsKey("imageData"))
                                imgsymb.ImageData = jsonObject["imageData"];
                            else if (jsonObject.ContainsKey("url"))
                                imgsymb.Source = jsonObject["url"];

                            symb = imgsymb;
                            break;
                            #endregion
                        default:
                            // all other REST defined cases
                            symb = Symbol.FromJson(jsonObject.ToString());
                            break;
                    }
                }
            }
            return symb;
        }
Ejemplo n.º 5
0
        private static MarkerSymbol cloneMarkerSymbol(MarkerSymbol symbol)
        {
            if (symbol == null)
            {
                return(null);
            }

            ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol imageFillSymbol = symbol as ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol;
            if (imageFillSymbol != null)
            {
                ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol ifs = new ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol()
                {
                    Color           = CloneBrush(imageFillSymbol.Color),
                    ControlTemplate = imageFillSymbol.ControlTemplate,
                    OffsetX         = imageFillSymbol.OffsetX,
                    OffsetY         = imageFillSymbol.OffsetY,
                    OriginX         = imageFillSymbol.OriginX,
                    OriginY         = imageFillSymbol.OriginY,
                    Opacity         = imageFillSymbol.Opacity,
                    Size            = imageFillSymbol.Size,
                    ImageData       = imageFillSymbol.ImageData,
                    Source          = imageFillSymbol.Source,
                    Fill            = CloneBrush(imageFillSymbol.Fill),
                    CursorName      = imageFillSymbol.CursorName,
                };
                return(ifs);
            }

            ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol ms = symbol as ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol;
            if (ms != null)
            {
                ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol marSymb = new ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol()
                {
                    DisplayName     = ms.DisplayName,
                    Offset          = new Point(ms.Offset.X, ms.Offset.Y),
                    Color           = CloneBrush(ms.Color),
                    ControlTemplate = ms.ControlTemplate,
                    OffsetX         = ms.OffsetX,
                    OffsetY         = ms.OffsetY,
                    OriginX         = ms.OriginX,
                    OriginY         = ms.OriginY,
                    Opacity         = ms.Opacity,
                    Size            = ms.Size,
                };
                return(marSymb);
            }

            ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol simpleMarkerSymbol = symbol as ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol;
            if (simpleMarkerSymbol != null)
            {
                ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol sms = new ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol()
                {
                    Color           = CloneBrush(simpleMarkerSymbol.Color),
                    ControlTemplate = simpleMarkerSymbol.ControlTemplate,
                    Size            = simpleMarkerSymbol.Size,
                    // Simple marker symbol doesn't allow setting OffsetX, OffsetY
                };
                return(sms);
            }

            TextSymbol textSymbol = symbol as TextSymbol;

            if (textSymbol != null)
            {
                TextSymbol ts = new TextSymbol()
                {
                    ControlTemplate = textSymbol.ControlTemplate,
                    FontFamily      = textSymbol.FontFamily,
                    FontSize        = textSymbol.FontSize,
                    Foreground      = CloneBrush(textSymbol.Foreground),
                    OffsetX         = textSymbol.OffsetX,
                    OffsetY         = textSymbol.OffsetY,
                    Text            = textSymbol.Text,
                };
                return(ts);
            }

            PictureMarkerSymbol pictureMarkerSymbol = symbol as PictureMarkerSymbol;

            if (pictureMarkerSymbol != null)
            {
                PictureMarkerSymbol pictMs = new PictureMarkerSymbol()
                {
                    ControlTemplate = pictureMarkerSymbol.ControlTemplate,
                    Height          = pictureMarkerSymbol.Height,
                    OffsetX         = pictureMarkerSymbol.OffsetX,
                    OffsetY         = pictureMarkerSymbol.OffsetY,
                    Opacity         = pictureMarkerSymbol.Opacity,
                    Source          = pictureMarkerSymbol.Source,
                    Width           = pictureMarkerSymbol.Width,
                };
                return(pictMs);
            }

            MarkerSymbol markerS = new MarkerSymbol()
            {
                ControlTemplate = symbol.ControlTemplate,
                OffsetX         = symbol.OffsetX,
                OffsetY         = symbol.OffsetY,
            };

            return(markerS);
        }
Ejemplo n.º 6
0
        private void WriteMarkerSymbol(MarkerSymbol markerSymbol)
        {
            ICustomSymbol symbol = markerSymbol as ICustomSymbol;
            if (symbol != null)
            {
                symbol.Serialize(writer, Namespaces);
                return;
            }

            string prefix = Constants.esriPrefix;
            if (markerSymbol is ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol)
                prefix = Constants.esriMappingPrefix;
            else if (markerSymbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol ||
                    markerSymbol is ESRI.ArcGIS.Client.FeatureService.Symbols.PictureMarkerSymbol)
                prefix = Constants.esriFSSymbolsPrefix;
            StartType(markerSymbol, prefix);

            if (markerSymbol is SimpleMarkerSymbol)
            {
                #region Size,Style,Color
                SimpleMarkerSymbol sms = markerSymbol as SimpleMarkerSymbol;
                WriteAttribute("Size", sms.Size);
                if (sms.Style != SimpleMarkerSymbol.SimpleMarkerStyle.Circle)
                {
                    WriteAttribute("Style", sms.Style.ToString());
                }
                if (sms.Color is SolidColorBrush && sms.Color.Opacity == 1)
                {
                    WriteAttribute("Color", (sms.Color as SolidColorBrush).Color);
                }
                else
                {                    
                    writer.WriteStartElement("SimpleMarkerSymbol.Color", Namespaces[Constants.esriPrefix]);
                    new BrushXamlWriter(writer, Namespaces).WriteBrush(sms.Color);
                    writer.WriteEndElement();
                }
                #endregion
            }
            else if (markerSymbol is ESRI.ArcGIS.Client.FeatureService.Symbols.PictureMarkerSymbol || markerSymbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol)
            {
                WriteJsonAttribute(markerSymbol as IJsonSerializable);
            }
            else
            {
                if (markerSymbol is ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol)
                {
                    #region Size,OriginX, OriginY, Opacity
                    ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol marker = markerSymbol as ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol;
                    if (marker != null)
                    {
                        WriteAttribute("Size", marker.Size);
                        WriteAttribute("OriginX", marker.OriginX);
                        WriteAttribute("OriginY", marker.OriginY);
                        if (marker.Opacity < 1)
                            WriteAttribute("Opacity", marker.Opacity);
                    }
                    #endregion
                }
                else if (!(markerSymbol is ESRI.ArcGIS.Client.FeatureService.Symbols.PictureMarkerSymbol || markerSymbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol))
                {
                    #region OffsetX, OffsetY
                    if (markerSymbol.OffsetX != 0)
                        WriteAttribute("OffsetX", markerSymbol.OffsetX);
                    if (markerSymbol.OffsetY != 0)
                        WriteAttribute("OffsetY", markerSymbol.OffsetY);
                    #endregion
                }

                PictureMarkerSymbol pms = markerSymbol as PictureMarkerSymbol;
                if (pms != null)
                {
                    #region PMS
                    WriteAttribute("Width", pms.Width);
                    WriteAttribute("Height", pms.Height);
                    if (pms.Opacity < 1)
                        WriteAttribute("Opacity", pms.Opacity);
                    string imageSource = SymbolExtensions.GetOriginalSource(pms);
                    if (!string.IsNullOrEmpty(imageSource))
                        writer.WriteElementString(Constants.esriMappingPrefix, "SymbolExtensions.OriginalSource", Constants.esriMappingNamespace, imageSource);
                    else
                    {
                        BitmapImage bmp = pms.Source as BitmapImage;
                        if (bmp != null && bmp.UriSource != null)
                        {
                            WriteAttribute("Source", bmp.UriSource.OriginalString);
                        }
                    }
                    #endregion
                }
                else if (markerSymbol is TextSymbol)
                {
                    #region TS
                    TextSymbol ts = markerSymbol as TextSymbol;
                    WriteAttribute("FontSize", ts.FontSize);
                    WriteAttribute("FontFamily", ts.FontFamily.Source);
                    WriteAttribute("Text", ts.Text);
                    if (ts.Foreground != null)
                    {
                        writer.WriteStartElement("TextSymbol.Foreground", Namespaces[Constants.esriPrefix]);
                        new BrushXamlWriter(writer, Namespaces).WriteBrush(ts.Foreground);
                        writer.WriteEndElement();
                    }
                    #endregion
                }
                else if (markerSymbol is ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol)
                {
                    #region IFS: Source
                    ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol fillSymbol = markerSymbol as ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol;
                    if (!string.IsNullOrEmpty(fillSymbol.ImageData))
                        writer.WriteAttributeString("ImageData", fillSymbol.ImageData); 
                    else if (!string.IsNullOrEmpty(fillSymbol.Source))
                        writer.WriteAttributeString("Source", fillSymbol.Source);
                    #endregion
                }
                else if (markerSymbol is ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol)
                {
                    #region Color
                    ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol marker = markerSymbol as ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol;
                    if (marker != null)
                    {
                        if (marker.Color != null)
                        {
                            writer.WriteStartElement("MarkerSymbol.Color", Namespaces[Constants.esriMappingPrefix]);
                            new BrushXamlWriter(writer, Namespaces).WriteBrush(marker.Color);
                            writer.WriteEndElement();
                        }
                    }
                    #endregion
                }
                #region Feature Service Symbols - Not used
                //else if (markerSymbol is ESRI.ArcGIS.Client.FeatureService.Symbols.PictureMarkerSymbol)
                //{
                //    #region pms
                //    ESRI.ArcGIS.Client.FeatureService.Symbols.PictureMarkerSymbol pmsfs = markerSymbol as ESRI.ArcGIS.Client.FeatureService.Symbols.PictureMarkerSymbol;
                //    WriteAttribute("Width", pmsfs.Width);
                //    WriteAttribute("Height", pmsfs.Height);
                //    WriteAttribute("Opacity", pmsfs.Opacity);
                //    WriteFeatureServiceMarkerSymbolProperties("PictureMarkerSymbol", pmsfs.Angle, pmsfs.XOffsetFromCenter,
                //         pmsfs.YOffsetFromCenter, pmsfs.Color, pmsfs.SelectionColor, pmsfs.RenderTransformPoint);
                //    #region Set ContentType,Url and ImageData to set Source
                //    SetImageSourceRelatedProperties(pmsfs, pmsfs.ToJson());
                //    #endregion
                //    #endregion
                //}
                //else if (markerSymbol is ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol)
                //{
                //    #region smsfs
                //    ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol smsfs = markerSymbol as ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol;
                //    WriteAttribute("OutlineThickness", smsfs.OutlineThickness);
                //    WriteAttribute("Size", smsfs.Size);
                //    WriteAttribute("Style", smsfs.Style.ToString());
                //    WriteAttribute("OutlineStyle", smsfs.OutlineStyle.ToString());
                //    WriteFeatureServiceMarkerSymbolProperties("SimpleMarkerSymbol", smsfs.Angle, smsfs.XOffsetFromCenter,
                //       smsfs.YOffsetFromCenter, smsfs.Color, smsfs.SelectionColor, smsfs.RenderTransformPoint);
                //    if (smsfs.OutlineColor != null)
                //    {
                //        writer.WriteStartElement("SimpleMarkerSymbol.OutlineColor", Namespaces[Constants.esriFSSymbolsPrefix]);
                //        new BrushXamlWriter(writer, Namespaces).WriteBrush(smsfs.OutlineColor);
                //        writer.WriteEndElement();
                //    }
                //    #endregion
                //}
                #endregion
                else
                    throw new NotSupportedException(markerSymbol.GetType().FullName);
            }
            writer.WriteEndElement();
        }
        /// <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);
        }
Ejemplo n.º 8
0
        private static MarkerSymbol cloneMarkerSymbol(MarkerSymbol symbol)
        {
            if (symbol == null)
                return null;

            ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol imageFillSymbol = symbol as ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol;
            if (imageFillSymbol != null)
            {
                ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol ifs = new ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol()
                {
                    Color = CloneBrush(imageFillSymbol.Color),
                    ControlTemplate = imageFillSymbol.ControlTemplate,
                    OffsetX = imageFillSymbol.OffsetX,
                    OffsetY = imageFillSymbol.OffsetY,
                    OriginX = imageFillSymbol.OriginX,
                    OriginY = imageFillSymbol.OriginY,
                    Opacity = imageFillSymbol.Opacity,
                    Size = imageFillSymbol.Size,
                    ImageData = imageFillSymbol.ImageData,
                    Source = imageFillSymbol.Source,
                    Fill = CloneBrush(imageFillSymbol.Fill),
                    CursorName = imageFillSymbol.CursorName,
                };
                return ifs;
            }

            ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol ms = symbol as ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol;
            if (ms != null)
            {
                ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol marSymb = new ESRI.ArcGIS.Mapping.Core.Symbols.MarkerSymbol()
                {
                    DisplayName = ms.DisplayName,
                    Offset = new Point(ms.Offset.X, ms.Offset.Y),
                    Color = CloneBrush(ms.Color),
                    ControlTemplate = ms.ControlTemplate,
                    OffsetX = ms.OffsetX,
                    OffsetY = ms.OffsetY,
                    OriginX = ms.OriginX,
                    OriginY = ms.OriginY,
                    Opacity = ms.Opacity,
                    Size = ms.Size,
                };
                return marSymb;
            }

            ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol simpleMarkerSymbol = symbol as ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol;
            if (simpleMarkerSymbol != null)
            {
                ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol sms = new ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol()
                {
                    Color = CloneBrush(simpleMarkerSymbol.Color),
                    ControlTemplate = simpleMarkerSymbol.ControlTemplate,
                    Size = simpleMarkerSymbol.Size,
                    // Simple marker symbol doesn't allow setting OffsetX, OffsetY
                };
                return sms;
            }

            TextSymbol textSymbol = symbol as TextSymbol;
            if (textSymbol != null)
            {
                TextSymbol ts = new TextSymbol()
                {
                    ControlTemplate = textSymbol.ControlTemplate,
                    FontFamily = textSymbol.FontFamily,
                    FontSize = textSymbol.FontSize,
                    Foreground = CloneBrush(textSymbol.Foreground),
                    OffsetX = textSymbol.OffsetX,
                    OffsetY = textSymbol.OffsetY,
                    Text = textSymbol.Text,
                };
                return ts;
            }

            PictureMarkerSymbol pictureMarkerSymbol = symbol as PictureMarkerSymbol;
            if (pictureMarkerSymbol != null)
            {
                PictureMarkerSymbol pictMs = new PictureMarkerSymbol()
                {
                    ControlTemplate = pictureMarkerSymbol.ControlTemplate,
                    Height = pictureMarkerSymbol.Height,
                    OffsetX = pictureMarkerSymbol.OffsetX,
                    OffsetY = pictureMarkerSymbol.OffsetY,
                    Opacity = pictureMarkerSymbol.Opacity,
                    Source = pictureMarkerSymbol.Source,
                    Width = pictureMarkerSymbol.Width,
                };
                return pictMs;
            }

            MarkerSymbol markerS = new MarkerSymbol()
            {
                ControlTemplate = symbol.ControlTemplate,
                OffsetX = symbol.OffsetX,
                OffsetY = symbol.OffsetY,
            };
            return markerS;
        }