Example #1
0
        public static async Task AddMapToNewLayout(Layout layout)
        {
            await QueuedTask.Run(() =>
            {
                //Build 2D envelope geometry
                Coordinate2D mf_ll = new Coordinate2D(1, 3.5);
                Coordinate2D mf_ur = new Coordinate2D(7.5, 9.5);
                Envelope mf_env    = EnvelopeBuilder.CreateEnvelope(mf_ll, mf_ur);

                //Reference map, create MF and add to layout
                MapProjectItem mapPrjItem = Project.Current.GetItems <MapProjectItem>().FirstOrDefault(item => item.Name.Equals("Map"));
                Map mfMap = mapPrjItem.GetMap();

                MapFrame mfElm = LayoutElementFactory.Instance.CreateMapFrame(layout, mf_env, mfMap);
                mfElm.SetName("My New Map Frame");
            });
        }
Example #2
0
        async protected override void OnClick()
        {
            LayoutView layoutView = LayoutView.Active;

            //Prevent tool from executing based on some conditions
            if (layoutView == null)
            {
                System.Windows.MessageBox.Show("Can't find layout view, try clicking New Game Board");
                return;
            }

            if (layoutView.Layout.Name != "Game Board")
            {
                System.Windows.MessageBox.Show("Wrong layout view: should be Game Board");
                return;
            }

            await QueuedTask.Run(() =>
            {
                //Reference the layout for moving map frames and adding new layout elements
                Layout layout = layoutView.Layout;

                //Check to see if elements were already scrambled
                MapFrame mfTest = layout.FindElement("MF1") as MapFrame;
                if (mfTest != null)
                {
                    System.Windows.MessageBox.Show("Game pieces already scrambled");
                    return;
                }

                //Build 6 envelopes to represent the locations of puzzle pieces along the outer edges
                Coordinate2D env1_ll = new Coordinate2D(0.5, 0.5);
                Coordinate2D env1_ur = new Coordinate2D(3.5, 3.5);
                Envelope env1        = EnvelopeBuilder.CreateEnvelope(env1_ll, env1_ur);

                Coordinate2D env2_ll = new Coordinate2D(0.5, 4);
                Coordinate2D env2_ur = new Coordinate2D(3.5, 7);
                Envelope env2        = EnvelopeBuilder.CreateEnvelope(env2_ll, env2_ur);

                Coordinate2D env3_ll = new Coordinate2D(0.5, 7.5);
                Coordinate2D env3_ur = new Coordinate2D(3.5, 10.5);
                Envelope env3        = EnvelopeBuilder.CreateEnvelope(env3_ll, env3_ur);

                Coordinate2D env4_ll = new Coordinate2D(13.5, 0.5);
                Coordinate2D env4_ur = new Coordinate2D(16.5, 3.5);
                Envelope env4        = EnvelopeBuilder.CreateEnvelope(env4_ll, env4_ur);

                Coordinate2D env5_ll = new Coordinate2D(13.5, 4);
                Coordinate2D env5_ur = new Coordinate2D(16.5, 7);
                Envelope env5        = EnvelopeBuilder.CreateEnvelope(env5_ll, env5_ur);

                Coordinate2D env6_ll = new Coordinate2D(13.5, 7.5);
                Coordinate2D env6_ur = new Coordinate2D(16.5, 10.5);
                Envelope env6        = EnvelopeBuilder.CreateEnvelope(env6_ll, env6_ur);

                //Randomize the envelopes by assigning new envelope variables used for map frame creation
                //Also remove the assigned env before selecting the next random env
                List <Envelope> envList = new List <Envelope> {
                    env1, env2, env3, env4, env5, env6
                };

                Random r1   = new Random();
                int i1      = r1.Next(envList.Count);
                Envelope e1 = envList[i1];
                envList.Remove(e1);

                Random r2   = new Random();
                int i2      = r2.Next(envList.Count);
                Envelope e2 = envList[i2];
                envList.Remove(e2);

                Random r3   = new Random();
                int i3      = r3.Next(envList.Count);
                Envelope e3 = envList[i3];
                envList.Remove(e3);

                Random r4   = new Random();
                int i4      = r4.Next(envList.Count);
                Envelope e4 = envList[i4];
                envList.Remove(e4);

                Random r5   = new Random();
                int i5      = r5.Next(envList.Count);
                Envelope e5 = envList[i5];
                envList.Remove(e5);

                Random r6   = new Random();
                int i6      = r6.Next(envList.Count);
                Envelope e6 = envList[i6];
                envList.Remove(e6);

                //Reference the active map view and gets its center location
                //MapView map = MapView.Active;
                MapFrame mapFrame = layout.FindElement("Main MF") as MapFrame;
                Camera cam        = mapFrame.Camera;
                double x          = cam.X;
                double y          = cam.Y;
                double scale      = cam.Scale;
                double delta      = scale * 1.5 / 12 / 3.28084; //scale * 1/2 of a 3" MF / 12" per foot / 3.28084 feet per meter

                //Insert Map Frame 1 at random location
                MapFrame mf1Elm = LayoutElementFactory.Instance.CreateMapFrame(layout, e1, mapFrame.Map);
                mf1Elm.SetName("MF1");
                Camera mf1cam = mf1Elm.Camera;
                mf1cam.X      = x - (delta * 2);
                mf1cam.Y      = y - delta;
                mf1cam.Scale  = scale;
                mf1Elm.SetCamera(mf1cam);

                //Insert Map Frame 2 at random location
                MapFrame mf2Elm = LayoutElementFactory.Instance.CreateMapFrame(layout, e2, mapFrame.Map);
                mf2Elm.SetName("MF2");
                Camera mf2cam = mf2Elm.Camera;
                mf2cam.X      = x;
                mf2cam.Y      = y - delta;
                mf2cam.Scale  = scale;
                mf2Elm.SetCamera(mf2cam);

                //Insert Map Frame 3 at random location
                MapFrame mf3Elm = LayoutElementFactory.Instance.CreateMapFrame(layout, e3, mapFrame.Map);
                mf3Elm.SetName("MF3");
                Camera mf3cam = mf3Elm.Camera;
                mf3cam.X      = x + (delta * 2);
                mf3cam.Y      = y - delta;
                mf3cam.Scale  = scale;
                mf3Elm.SetCamera(mf3cam);

                //Insert Map Frame 4 at random location

                MapFrame mf4Elm = LayoutElementFactory.Instance.CreateMapFrame(layout, e4, mapFrame.Map);
                mf4Elm.SetName("MF4");
                Camera mf4cam = mf4Elm.Camera;
                mf4cam.X      = x + (delta * 2);
                mf4cam.Y      = y + delta;
                mf4cam.Scale  = scale;
                mf4Elm.SetCamera(mf4cam);

                //Insert Map Frame 5 at random location
                MapFrame mf5Elm = LayoutElementFactory.Instance.CreateMapFrame(layout, e5, mapFrame.Map);
                mf5Elm.SetName("MF5");
                Camera mf5cam = mf5Elm.Camera;
                mf5cam.X      = x;
                mf5cam.Y      = y + delta;
                mf5cam.Scale  = scale;
                mf5Elm.SetCamera(mf5cam);

                //Insert Map Frame 6 at random location
                MapFrame mf6Elm = LayoutElementFactory.Instance.CreateMapFrame(layout, e6, mapFrame.Map);
                mf6Elm.SetName("MF6");
                Camera mf6cam = mf6Elm.Camera;
                mf6cam.X      = x - (delta * 2);
                mf6cam.Y      = y + delta;
                mf6cam.Scale  = scale;
                mf6Elm.SetCamera(mf6cam);

                //Create 6 polygon boxes that represent where the outer map frames need to be placed.
                Coordinate2D box1_ll = new Coordinate2D(4, 0.5);
                Coordinate2D box1_ur = new Coordinate2D(7, 3.5);
                Envelope box1_env    = EnvelopeBuilder.CreateEnvelope(box1_ll, box1_ur);
                GraphicElement box1  = LayoutElementFactory.Instance.CreateRectangleGraphicElement(layout, box1_env);
                box1.SetName("Rectangle 1");

                Coordinate2D box2_ll = new Coordinate2D(7, 0.5);
                Coordinate2D box2_ur = new Coordinate2D(10, 3.5);
                Envelope box2_env    = EnvelopeBuilder.CreateEnvelope(box2_ll, box2_ur);
                GraphicElement box2  = LayoutElementFactory.Instance.CreateRectangleGraphicElement(layout, box2_env);
                box2.SetName("Rectangle 2");

                Coordinate2D box3_ll = new Coordinate2D(10, 0.5);
                Coordinate2D box3_ur = new Coordinate2D(13, 3.5);
                Envelope box3_env    = EnvelopeBuilder.CreateEnvelope(box3_ll, box3_ur);
                GraphicElement box3  = LayoutElementFactory.Instance.CreateRectangleGraphicElement(layout, box3_env);
                box3.SetName("Rectangle 3");

                Coordinate2D box4_ll = new Coordinate2D(10, 3.5);
                Coordinate2D box4_ur = new Coordinate2D(13, 6.5);
                Envelope box4_env    = EnvelopeBuilder.CreateEnvelope(box4_ll, box4_ur);
                GraphicElement box4  = LayoutElementFactory.Instance.CreateRectangleGraphicElement(layout, box4_env);
                box4.SetName("Rectangle 4");

                Coordinate2D box5_ll = new Coordinate2D(7, 3.5);
                Coordinate2D box5_ur = new Coordinate2D(10, 6.5);
                Envelope box5_env    = EnvelopeBuilder.CreateEnvelope(box5_ll, box5_ur);
                GraphicElement box5  = LayoutElementFactory.Instance.CreateRectangleGraphicElement(layout, box5_env);
                box5.SetName("Rectangle 5");

                Coordinate2D box6_ll = new Coordinate2D(4, 3.5);
                Coordinate2D box6_ur = new Coordinate2D(7, 6.5);
                Envelope box6_env    = EnvelopeBuilder.CreateEnvelope(box6_ll, box6_ur);
                GraphicElement box6  = LayoutElementFactory.Instance.CreateRectangleGraphicElement(layout, box6_env);
                box6.SetName("Rectangle 6");

                //Find MainMF and set invisible
                MapFrame mainMF = layout.FindElement("Main MF") as MapFrame;
                mainMF.SetVisible(false);

                //Update Instructions
                TextElement steps = layout.FindElement("Instructions") as TextElement;
                string text       = "<bol>Instructions: </bol>\n\n  - Click the 'Play Game' command" as String;
                var stepsProp     = steps.TextProperties;
                stepsProp.Text    = text;
                steps.SetTextProperties(stepsProp);
            });

            layoutView.ClearElementSelection();
        }
Example #3
0
        public void snippets_CreateLayoutElements()
        {
            LayoutView layoutView = LayoutView.Active;
            Layout     layout     = layoutView.Layout;

            #region Create point graphic with symbology

            //Create a simple 2D point graphic and apply an existing point style item as the symbology.
            //An alternative simple symbol is also provided below.  This would completely elminate the 4 lines of code that reference a style.

            QueuedTask.Run(() =>
            {
                //Build 2D point geometry
                Coordinate2D coord2D = new Coordinate2D(2.0, 10.0);

                //Reference a point symbol in a style
                StyleProjectItem ptStylePrjItm = Project.Current.GetItems <StyleProjectItem>().FirstOrDefault(item => item.Name == "ArcGIS 2D");
                SymbolStyleItem ptSymStyleItm  = ptStylePrjItm.SearchSymbols(StyleItemType.PointSymbol, "City Hall")[0];
                CIMPointSymbol pointSym        = ptSymStyleItm.Symbol as CIMPointSymbol;
                pointSym.SetSize(50);

                //Set symbolology, create and add element to layout
                //CIMPointSymbol pointSym = SymbolFactory.Instance.ConstructPointSymbol(ColorFactory.Instance.RedRGB, 25.0, SimpleMarkerStyle.Star);  //Alternative simple symbol
                GraphicElement ptElm = LayoutElementFactory.Instance.CreatePointGraphicElement(layout, coord2D, pointSym);
                ptElm.SetName("New Point");
            });
            #endregion

            #region Create line graphic with symbology

            //Create a simple 2D line graphic and apply an existing line style item as the symbology.
            //An alternative simple symbol is also provided below.  This would completely elminate the 4 lines of code that reference a style.

            QueuedTask.Run(() =>
            {
                //Build 2d line geometry
                List <Coordinate2D> plCoords = new List <Coordinate2D>();
                plCoords.Add(new Coordinate2D(1, 8.5));
                plCoords.Add(new Coordinate2D(1.66, 9));
                plCoords.Add(new Coordinate2D(2.33, 8.1));
                plCoords.Add(new Coordinate2D(3, 8.5));
                Polyline linePl = PolylineBuilder.CreatePolyline(plCoords);

                //Reference a line symbol in a style
                StyleProjectItem lnStylePrjItm = Project.Current.GetItems <StyleProjectItem>().FirstOrDefault(item => item.Name == "ArcGIS 2D");
                SymbolStyleItem lnSymStyleItm  = lnStylePrjItm.SearchSymbols(StyleItemType.LineSymbol, "Line with 2 Markers")[0];
                CIMLineSymbol lineSym          = lnSymStyleItm.Symbol as CIMLineSymbol;
                lineSym.SetSize(20);

                //Set symbolology, create and add element to layout
                //CIMLineSymbol lineSym = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.BlueRGB, 4.0, SimpleLineStyle.Solid);  //Alternative simple symbol
                GraphicElement lineElm = LayoutElementFactory.Instance.CreateLineGraphicElement(layout, linePl, lineSym);
                lineElm.SetName("New Line");
            });
            #endregion

            #region Create rectangle graphic with simple symbology

            //Create a simple 2D rectangle graphic and apply simple fill and outline symbols.

            QueuedTask.Run(() =>
            {
                //Build 2D envelope geometry
                Coordinate2D rec_ll = new Coordinate2D(1.0, 4.75);
                Coordinate2D rec_ur = new Coordinate2D(3.0, 5.75);
                Envelope rec_env    = EnvelopeBuilder.CreateEnvelope(rec_ll, rec_ur);

                //Set symbolology, create and add element to layout
                CIMStroke outline        = SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.BlackRGB, 5.0, SimpleLineStyle.Solid);
                CIMPolygonSymbol polySym = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.GreenRGB, SimpleFillStyle.DiagonalCross, outline);
                GraphicElement recElm    = LayoutElementFactory.Instance.CreateRectangleGraphicElement(layout, rec_env, polySym);
                recElm.SetName("New Rectangle");
            });
            #endregion

            #region Create text element with basic font properties

            //Create a simple point text element and assign basic symbology as well as basic text settings.

            QueuedTask.Run(() =>
            {
                //Build 2D point geometry
                Coordinate2D coord2D = new Coordinate2D(3.5, 10);

                //Set symbolology, create and add element to layout
                CIMTextSymbol sym       = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.RedRGB, 32, "Arial", "Regular");
                string textString       = "Point text";
                GraphicElement ptTxtElm = LayoutElementFactory.Instance.CreatePointTextGraphicElement(layout, coord2D, textString, sym);
                ptTxtElm.SetName("New Point Text");

                //Change additional text properties
                ptTxtElm.SetAnchor(Anchor.CenterPoint);
                ptTxtElm.SetX(4.5);
                ptTxtElm.SetY(9.5);
                ptTxtElm.SetRotation(45);
            });
            #endregion

            #region Create rectangle text with more advanced symbol settings

            //Create rectangle text with background and border symbology.  Also notice how formatting tags are using within the text string.

            QueuedTask.Run(() =>
            {
                //Build 2D polygon geometry
                List <Coordinate2D> plyCoords = new List <Coordinate2D>();
                plyCoords.Add(new Coordinate2D(3.5, 7));
                plyCoords.Add(new Coordinate2D(4.5, 7));
                plyCoords.Add(new Coordinate2D(4.5, 6.7));
                plyCoords.Add(new Coordinate2D(5.5, 6.7));
                plyCoords.Add(new Coordinate2D(5.5, 6.1));
                plyCoords.Add(new Coordinate2D(3.5, 6.1));
                Polygon poly = PolygonBuilder.CreatePolygon(plyCoords);

                //Set symbolology, create and add element to layout
                CIMTextSymbol sym         = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.GreyRGB, 10, "Arial", "Regular");
                string text               = "Some Text String that is really long and is <BOL>forced to wrap to other lines</BOL> so that we can see the effects." as String;
                GraphicElement polyTxtElm = LayoutElementFactory.Instance.CreatePolygonParagraphGraphicElement(layout, poly, text, sym);
                polyTxtElm.SetName("New Polygon Text");

                //(Optionally) Modify paragraph border
                CIMGraphic polyTxtGra = polyTxtElm.Graphic;
                CIMParagraphTextGraphic cimPolyTxtGra   = polyTxtGra as CIMParagraphTextGraphic;
                cimPolyTxtGra.Frame.BorderSymbol        = new CIMSymbolReference();
                cimPolyTxtGra.Frame.BorderSymbol.Symbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.GreyRGB, 1.0, SimpleLineStyle.Solid);
                polyTxtElm.SetGraphic(polyTxtGra);
            });
            #endregion

            #region Create a new picture element with advanced symbol settings

            //Create a picture element and also set background and border symbology.

            QueuedTask.Run(() =>
            {
                //Build 2D envelope geometry
                Coordinate2D pic_ll = new Coordinate2D(6, 1);
                Coordinate2D pic_ur = new Coordinate2D(8, 2);
                Envelope env        = EnvelopeBuilder.CreateEnvelope(pic_ll, pic_ur);

                //Create and add element to layout
                string picPath        = @"C:\Temp\WhitePass.jpg";
                GraphicElement picElm = LayoutElementFactory.Instance.CreatePictureGraphicElement(layout, env, picPath);
                picElm.SetName("New Picture");

                //(Optionally) Modify the border and shadow
                CIMGraphic picGra                   = picElm.Graphic;
                CIMPictureGraphic cimPicGra         = picGra as CIMPictureGraphic;
                cimPicGra.Frame.BorderSymbol        = new CIMSymbolReference();
                cimPicGra.Frame.BorderSymbol.Symbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.BlueRGB, 2.0, SimpleLineStyle.Solid);

                cimPicGra.Frame.ShadowSymbol        = new CIMSymbolReference();
                cimPicGra.Frame.ShadowSymbol.Symbol = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.BlackRGB, SimpleFillStyle.Solid);

                picElm.SetGraphic(picGra);
            });
            #endregion

            #region Create a map frame and zoom to a bookmark

            //Create a map frame and also sets its extent by zooming the the extent of an existing bookmark.

            QueuedTask.Run(() =>
            {
                //Build 2D envelope geometry
                Coordinate2D mf_ll = new Coordinate2D(6.0, 8.5);
                Coordinate2D mf_ur = new Coordinate2D(8.0, 10.5);
                Envelope mf_env    = EnvelopeBuilder.CreateEnvelope(mf_ll, mf_ur);

                //Reference map, create MF and add to layout
                MapProjectItem mapPrjItem = Project.Current.GetItems <MapProjectItem>().FirstOrDefault(item => item.Name.Equals("Map"));
                Map mfMap      = mapPrjItem.GetMap();
                MapFrame mfElm = LayoutElementFactory.Instance.CreateMapFrame(layout, mf_env, mfMap);
                mfElm.SetName("New Map Frame");

                //Zoom to bookmark
                Bookmark bookmark = mfElm.Map.GetBookmarks().FirstOrDefault(b => b.Name == "Great Lakes");
                mfElm.SetCamera(bookmark);
            });
            #endregion

            #region Create a legend for a specifc map frame

            //Create a legend for an associated map frame.

            QueuedTask.Run(() =>
            {
                //Build 2D envelope geometry
                Coordinate2D leg_ll = new Coordinate2D(6, 2.5);
                Coordinate2D leg_ur = new Coordinate2D(8, 4.5);
                Envelope leg_env    = EnvelopeBuilder.CreateEnvelope(leg_ll, leg_ur);

                //Reference MF, create legend and add to layout
                MapFrame mapFrame = layout.FindElement("New Map Frame") as MapFrame;
                if (mapFrame == null)
                {
                    ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Map frame not found", "WARNING");
                    return;
                }
                Legend legendElm = LayoutElementFactory.Instance.CreateLegend(layout, leg_env, mapFrame);
                legendElm.SetName("New Legend");
            });
            #endregion

            #region Creating group elements
            //Create an empty group element at the root level of the contents pane
            //Note: call within QueuedTask.Run()
            GroupElement grp1 = LayoutElementFactory.Instance.CreateGroupElement(layout);
            grp1.SetName("Group");

            //Create a group element inside another group element
            //Note: call within QueuedTask.Run()
            GroupElement grp2 = LayoutElementFactory.Instance.CreateGroupElement(grp1);
            grp2.SetName("Group in Group");
            #endregion Creating group elements

            {
                #region Create scale bar
                Coordinate2D llScalebar = new Coordinate2D(6, 2.5);
                MapFrame     mapframe   = layout.FindElement("New Map Frame") as MapFrame;
                //Note: call within QueuedTask.Run()
                LayoutElementFactory.Instance.CreateScaleBar(layout, llScalebar, mapframe);
                #endregion
            }
            #region How to search for scale bars in a style
            var arcgis_2d = Project.Current.GetItems <StyleProjectItem>().First(si => si.Name == "ArcGIS 2D");
            QueuedTask.Run(() => {
                var scaleBarItems = arcgis_2d.SearchScaleBars("Double Alternating Scale Bar");
            });

            #endregion

            #region How to add a scale bar from a style to a layout
            var arcgis_2dStyle = Project.Current.GetItems <StyleProjectItem>().First(si => si.Name == "ArcGIS 2D");
            QueuedTask.Run(() =>
            {
                //Imperial Double Alternating Scale Bar
                //Metric Double Alternating Scale Bar
                //or just use empty string to list them all...
                var scaleBarItem     = arcgis_2d.SearchScaleBars("Double Alternating Scale Bar").FirstOrDefault();
                Coordinate2D coord2D = new Coordinate2D(10.0, 7.0);
                MapFrame myMapFrame  = layout.FindElement("Map Frame") as MapFrame;
                LayoutElementFactory.Instance.CreateScaleBar(layout, coord2D, myMapFrame, scaleBarItem);
            });
            #endregion

            #region Create NorthArrow
            Coordinate2D llNorthArrow = new Coordinate2D(6, 2.5);
            MapFrame     mf           = layout.FindElement("New Map Frame") as MapFrame;
            //Note: call within QueuedTask.Run()
            var northArrow = LayoutElementFactory.Instance.CreateNorthArrow(layout, llNorthArrow, mf);
            #endregion

            #region How to search for North Arrows in a style
            var arcgis_2dStyles = Project.Current.GetItems <StyleProjectItem>().First(si => si.Name == "ArcGIS 2D");
            QueuedTask.Run(() => {
                var scaleBarItems = arcgis_2dStyles.SearchNorthArrows("ArcGIS North 13");
            });
            #endregion

            #region How to add a North Arrow from a style to a layout
            var arcgis2dStyles = Project.Current.GetItems <StyleProjectItem>().First(si => si.Name == "ArcGIS 2D");
            QueuedTask.Run(() => {
                var northArrowStyleItem = arcgis2dStyles.SearchNorthArrows("ArcGIS North 13").FirstOrDefault();
                Coordinate2D nArrow     = new Coordinate2D(6, 2.5);
                MapFrame newFrame       = layout.FindElement("New Map Frame") as MapFrame;
                //Note: call within QueuedTask.Run()
                var newNorthArrow = LayoutElementFactory.Instance.CreateNorthArrow(layout, nArrow, newFrame, northArrowStyleItem);
            });

            #endregion

            #region Create dynamic text
            var          title   = @"<dyn type = ""page"" property = ""name"" />";
            Coordinate2D llTitle = new Coordinate2D(6, 2.5);
            //Note: call within QueuedTask.Run()
            var titleGraphics = LayoutElementFactory.Instance.CreatePointTextGraphicElement(layout, llTitle, null) as TextElement;
            titleGraphics.SetTextProperties(new TextProperties(title, "Arial", 24, "Bold"));
            #endregion


            #region Create dynamic table

            QueuedTask.Run(() =>
            {
                //Build 2D envelope geometry
                Coordinate2D tab_ll = new Coordinate2D(6, 2.5);
                Coordinate2D tab_ur = new Coordinate2D(12, 6.5);
                Envelope tab_env    = EnvelopeBuilder.CreateEnvelope(tab_ll, tab_ur);
                MapFrame mapFrame   = layout.FindElement("New Map Frame") as MapFrame;
                // get the layer
                MapProjectItem mapPrjItem = Project.Current.GetItems <MapProjectItem>().FirstOrDefault(item => item.Name.Equals("Map"));
                Map theMap = mapPrjItem?.GetMap();
                var lyrs   = theMap?.FindLayers("Inspection Point Layer", true);
                if (lyrs?.Count > 0)
                {
                    Layer lyr  = lyrs[0];
                    var table1 = LayoutElementFactory.Instance.CreateTableFrame(layout, tab_env, mapFrame, lyr, new string[] { "No", "Type", "Description" });
                }
            });
            #endregion
        }
Example #4
0
        async public static void CreateElementSnippets()
        {
            //There are already many Create element snippets in the PRO snippets section.  This section will only contain examples that are NOT in the Pro snippets section
            //Pro snippets region names includes:
            //    Create point graphic with symbology
            //    Create line graphic with symbology
            //    Create rectangle graphic with simple symbology
            //    Create text element with basic font properties
            //    Create rectangle text with more advanced symbol settings
            //    Create a new picture element with advanced symbol settings
            //    Create a map frame and zoom to a bookmark
            //    Create a legend for a specifc map frame
            //    Creating group elements

            LayoutView lytView = LayoutView.Active;
            Layout     layout  = lytView.Layout;

            #region Create_BeizierCurve
            await QueuedTask.Run(() =>
            {
                //Build geometry
                Coordinate2D pt1          = new Coordinate2D(1, 7.5);
                Coordinate2D pt2          = new Coordinate2D(1.66, 8);
                Coordinate2D pt3          = new Coordinate2D(2.33, 7.1);
                Coordinate2D pt4          = new Coordinate2D(3, 7.5);
                CubicBezierBuilder bez    = new CubicBezierBuilder(pt1, pt2, pt3, pt4);
                CubicBezierSegment bezSeg = bez.ToSegment();
                Polyline bezPl            = PolylineBuilder.CreatePolyline(bezSeg);

                //Set symbology, create and add element to layout
                CIMLineSymbol lineSym = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.RedRGB, 4.0, SimpleLineStyle.DashDot);
                GraphicElement bezElm = LayoutElementFactory.Instance.CreateLineGraphicElement(layout, bezPl, lineSym);
                bezElm.SetName("New Bezier Curve");
            });

            #endregion Create_BeizierCurve

            #region Create_freehand
            await QueuedTask.Run(() =>
            {
                //Build geometry
                List <Coordinate2D> plCoords = new List <Coordinate2D>();
                plCoords.Add(new Coordinate2D(1.5, 10.5));
                plCoords.Add(new Coordinate2D(1.25, 9.5));
                plCoords.Add(new Coordinate2D(1, 10.5));
                plCoords.Add(new Coordinate2D(0.75, 9.5));
                plCoords.Add(new Coordinate2D(0.5, 10.5));
                plCoords.Add(new Coordinate2D(0.5, 1));
                plCoords.Add(new Coordinate2D(0.75, 2));
                plCoords.Add(new Coordinate2D(1, 1));
                Polyline linePl = PolylineBuilder.CreatePolyline(plCoords);

                //Set symbolology, create and add element to layout
                CIMLineSymbol lineSym  = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.BlackRGB, 2.0, SimpleLineStyle.Solid);
                GraphicElement lineElm = LayoutElementFactory.Instance.CreateLineGraphicElement(layout, linePl, lineSym);
                lineElm.SetName("New Freehand");
            });

            #endregion Create_freehand

            #region Create_polygon
            await QueuedTask.Run(() =>
            {
                //Build geometry
                List <Coordinate2D> plyCoords = new List <Coordinate2D>();
                plyCoords.Add(new Coordinate2D(1, 7));
                plyCoords.Add(new Coordinate2D(2, 7));
                plyCoords.Add(new Coordinate2D(2, 6.7));
                plyCoords.Add(new Coordinate2D(3, 6.7));
                plyCoords.Add(new Coordinate2D(3, 6.1));
                plyCoords.Add(new Coordinate2D(1, 6.1));
                Polygon poly = PolygonBuilder.CreatePolygon(plyCoords);

                //Set symbolology, create and add element to layout
                CIMStroke outline        = SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.BlueRGB, 2.0, SimpleLineStyle.DashDotDot);
                CIMPolygonSymbol polySym = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.RedRGB, SimpleFillStyle.ForwardDiagonal, outline);
                GraphicElement polyElm   = LayoutElementFactory.Instance.CreatePolygonGraphicElement(layout, poly, polySym);
                polyElm.SetName("New Polygon");
            });

            #endregion Create_polygon

            #region Create_circle
            await QueuedTask.Run(() =>
            {
                //Build geometry
                Coordinate2D center       = new Coordinate2D(2, 4);
                EllipticArcBuilder eabCir = new EllipticArcBuilder(center, 0.5, esriArcOrientation.esriArcClockwise);
                EllipticArcSegment cir    = eabCir.ToSegment();

                //Set symbolology, create and add element to layout
                CIMStroke outline          = SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.BlackRGB, 2.0, SimpleLineStyle.Dash);
                CIMPolygonSymbol circleSym = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.RedRGB, SimpleFillStyle.Solid, outline);
                GraphicElement cirElm      = LayoutElementFactory.Instance.CreateCircleGraphicElement(layout, cir, circleSym);
                cirElm.SetName("New Circle");
            });

            #endregion Create_circle

            #region Create_ellipse
            await QueuedTask.Run(() =>
            {
                //Build geometry
                Coordinate2D center        = new Coordinate2D(2, 2.75);
                EllipticArcBuilder eabElp  = new EllipticArcBuilder(center, 0, 1, 0.45, esriArcOrientation.esriArcClockwise);
                EllipticArcSegment ellipse = eabElp.ToSegment();

                //Set symbolology, create and add element to layout
                CIMStroke outline           = SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.GreenRGB, 2.0, SimpleLineStyle.Dot);
                CIMPolygonSymbol ellipseSym = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.GreyRGB, SimpleFillStyle.Vertical, outline);
                GraphicElement elpElm       = LayoutElementFactory.Instance.CreateEllipseGraphicElement(layout, ellipse, ellipseSym);
                elpElm.SetName("New Ellipse");
            });

            #endregion Create_ellipse

            #region Create_lasso
            await QueuedTask.Run(() =>
            {
                //Build geometry
                List <Coordinate2D> plyCoords = new List <Coordinate2D>();
                plyCoords.Add(new Coordinate2D(1, 1));
                plyCoords.Add(new Coordinate2D(1.25, 2));
                plyCoords.Add(new Coordinate2D(1.5, 1.1));
                plyCoords.Add(new Coordinate2D(1.75, 2));
                plyCoords.Add(new Coordinate2D(2, 1.1));
                plyCoords.Add(new Coordinate2D(2.25, 2));
                plyCoords.Add(new Coordinate2D(2.5, 1.1));
                plyCoords.Add(new Coordinate2D(2.75, 2));
                plyCoords.Add(new Coordinate2D(3, 1));
                Polygon poly = PolygonBuilder.CreatePolygon(plyCoords);

                //Set symbolology, create and add element to layout
                CIMStroke outline        = SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.BlackRGB, 2.0, SimpleLineStyle.Solid);
                CIMPolygonSymbol polySym = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.RedRGB, SimpleFillStyle.ForwardDiagonal, outline);
                GraphicElement polyElm   = LayoutElementFactory.Instance.CreatePolygonGraphicElement(layout, poly, polySym);
                polyElm.SetName("New Lasso");
            });

            #endregion Create_lasso

            #region Create_CurveText
            await QueuedTask.Run(() =>
            {
                //Build geometry
                Coordinate2D pt1          = new Coordinate2D(3.6, 7.5);
                Coordinate2D pt2          = new Coordinate2D(4.26, 8);
                Coordinate2D pt3          = new Coordinate2D(4.93, 7.1);
                Coordinate2D pt4          = new Coordinate2D(5.6, 7.5);
                CubicBezierBuilder bez    = new CubicBezierBuilder(pt1, pt2, pt3, pt4);
                CubicBezierSegment bezSeg = bez.ToSegment();
                Polyline bezPl            = PolylineBuilder.CreatePolyline(bezSeg);

                //Set symbolology, create and add element to layout
                CIMTextSymbol sym        = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlackRGB, 24, "Comic Sans MS", "Regular");
                GraphicElement bezTxtElm = LayoutElementFactory.Instance.CreateCurvedTextGraphicElement(layout, bezPl, "Curved Text", sym);
                bezTxtElm.SetName("New Splinned Text");
            });

            #endregion Create_CurveText

            #region Create_PolygonText
            await QueuedTask.Run(() =>
            {
                //Build geometry
                List <Coordinate2D> plyCoords = new List <Coordinate2D>();
                plyCoords.Add(new Coordinate2D(3.5, 7));
                plyCoords.Add(new Coordinate2D(4.5, 7));
                plyCoords.Add(new Coordinate2D(4.5, 6.7));
                plyCoords.Add(new Coordinate2D(5.5, 6.7));
                plyCoords.Add(new Coordinate2D(5.5, 6.1));
                plyCoords.Add(new Coordinate2D(3.5, 6.1));
                Polygon poly = PolygonBuilder.CreatePolygon(plyCoords);

                //Set symbolology, create and add element to layout
                CIMTextSymbol sym         = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.GreyRGB, 10, "Arial", "Regular");
                string text               = "Some Text String that is really long and is <BOL>forced to wrap to other lines</BOL> so that we can see the effects." as String;
                GraphicElement polyTxtElm = LayoutElementFactory.Instance.CreatePolygonParagraphGraphicElement(layout, poly, text, sym);
                polyTxtElm.SetName("New Polygon Text");

                //(Optionally) Modify paragraph border
                CIMGraphic polyTxtGra = polyTxtElm.Graphic;
                CIMParagraphTextGraphic cimPolyTxtGra   = polyTxtGra as CIMParagraphTextGraphic;
                cimPolyTxtGra.Frame.BorderSymbol        = new CIMSymbolReference();
                cimPolyTxtGra.Frame.BorderSymbol.Symbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.GreyRGB, 1.0, SimpleLineStyle.Solid);
                polyTxtElm.SetGraphic(polyTxtGra);
            });

            #endregion Create_PolygonText

            #region Create_CircleText
            await QueuedTask.Run(() =>
            {
                //Build geometry
                Coordinate2D center       = new Coordinate2D(4.5, 4);
                EllipticArcBuilder eabCir = new EllipticArcBuilder(center, 0.5, esriArcOrientation.esriArcClockwise);
                EllipticArcSegment cir    = eabCir.ToSegment();

                //Set symbolology, create and add element to layout
                CIMTextSymbol sym        = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.GreenRGB, 10, "Arial", "Regular");
                string text              = "Circle, circle, circle, circle, circle, circle, circle, circle, circle, circle, circle";
                GraphicElement cirTxtElm = LayoutElementFactory.Instance.CreateCircleParagraphGraphicElement(layout, cir, text, sym);
                cirTxtElm.SetName("New Circle Text");

                //(Optionally) Modify paragraph border
                CIMGraphic cirTxtGra = cirTxtElm.Graphic;
                CIMParagraphTextGraphic cimCirTxtGra   = cirTxtGra as CIMParagraphTextGraphic;
                cimCirTxtGra.Frame.BorderSymbol        = new CIMSymbolReference();
                cimCirTxtGra.Frame.BorderSymbol.Symbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.GreyRGB, 1.0, SimpleLineStyle.Solid);
                cirTxtElm.SetGraphic(cirTxtGra);
            });

            #endregion Create_CircleText

            #region Create_EllipseText
            await QueuedTask.Run(() =>
            {
                //Build geometry
                Coordinate2D center        = new Coordinate2D(4.5, 2.75);
                EllipticArcBuilder eabElp  = new EllipticArcBuilder(center, 0, 1, 0.45, esriArcOrientation.esriArcClockwise);
                EllipticArcSegment ellipse = eabElp.ToSegment();

                //Set symbolology, create and add element to layout
                CIMTextSymbol sym        = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlueRGB, 10, "Arial", "Regular");
                string text              = "Ellipse, ellipse, ellipse, ellipse, ellipse, ellipse, ellipse, ellipse, ellipse, ellipse, ellipse, ellipse";
                GraphicElement elpTxtElm = LayoutElementFactory.Instance.CreateEllipseParagraphGraphicElement(layout, ellipse, text, sym);
                elpTxtElm.SetName("New Ellipse Text");

                //(Optionally) Modify paragraph border
                CIMGraphic elpTxtGra = elpTxtElm.Graphic;
                CIMParagraphTextGraphic cimElpTxtGra   = elpTxtGra as CIMParagraphTextGraphic;
                cimElpTxtGra.Frame.BorderSymbol        = new CIMSymbolReference();
                cimElpTxtGra.Frame.BorderSymbol.Symbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.GreyRGB, 1.0, SimpleLineStyle.Solid);
                elpTxtElm.SetGraphic(elpTxtGra);
            });

            #endregion Create_EllipseText

            MapFrame mfElm = null;
            #region Create_MapFrame
            //This example creates a new map frame and changes the camera scale.
            await QueuedTask.Run(() =>
            {
                //Build geometry
                Coordinate2D ll = new Coordinate2D(6.0, 8.5);
                Coordinate2D ur = new Coordinate2D(8.0, 10.5);
                Envelope env    = EnvelopeBuilder.CreateEnvelope(ll, ur);

                //Reference map, create MF and add to layout
                MapProjectItem mapPrjItem = Project.Current.GetItems <MapProjectItem>().FirstOrDefault(item => item.Name.Equals("Map"));
                Map mfMap = mapPrjItem.GetMap();
                mfElm     = LayoutElementFactory.Instance.CreateMapFrame(layout, env, mfMap);
                mfElm.SetName("New Map Frame");

                //Set the camera
                Camera camera = mfElm.Camera;
                camera.Scale  = 24000;
                mfElm.SetCamera(camera);
            });

            #endregion Create_MapFrame


            #region Create_ScaleBar
            await QueuedTask.Run(() =>
            {
                //Reference a North Arrow in a style
                StyleProjectItem stylePrjItm = Project.Current.GetItems <StyleProjectItem>().FirstOrDefault(item => item.Name == "ArcGIS 2D");
                ScaleBarStyleItem sbStyleItm = stylePrjItm.SearchScaleBars("Double Alternating Scale Bar 1")[0];

                //Build geometry
                Coordinate2D center = new Coordinate2D(7, 8);

                //Reference MF, create north arrow and add to layout
                MapFrame mf = layout.FindElement("New Map Frame") as MapFrame;
                if (mf == null)
                {
                    ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Map frame not found", "WARNING");
                    return;
                }
                ScaleBar sbElm = LayoutElementFactory.Instance.CreateScaleBar(layout, center, mf, sbStyleItm);
                sbElm.SetName("New Scale Bar");
                sbElm.SetWidth(2);
                sbElm.SetX(6);
                sbElm.SetY(7.5);
            });

            #endregion Create_ScaleBar

            #region Create_NorthArrow
            await QueuedTask.Run(() =>
            {
                //Reference a North Arrow in a style
                StyleProjectItem stylePrjItm   = Project.Current.GetItems <StyleProjectItem>().FirstOrDefault(item => item.Name == "ArcGIS 2D");
                NorthArrowStyleItem naStyleItm = stylePrjItm.SearchNorthArrows("ArcGIS North 10")[0];

                //Build geometry
                Coordinate2D center = new Coordinate2D(7, 5.5);

                //Reference MF, create north arrow and add to layout
                MapFrame mf = layout.FindElement("New Map Frame") as MapFrame;
                if (mf == null)
                {
                    ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Map frame not found", "WARNING");
                    return;
                }
                NorthArrow arrowElm = LayoutElementFactory.Instance.CreateNorthArrow(layout, center, mf, naStyleItm);
                arrowElm.SetName("New North Arrow");
                arrowElm.SetHeight(1.75);
                arrowElm.SetX(7);
                arrowElm.SetY(6);
            });

            #endregion Create_NorthArrow
        }
        async protected override void OnClick()
        {
            //Check to see if the Game Board layout already exists
            LayoutProjectItem layoutItem = Project.Current.GetItems <LayoutProjectItem>().FirstOrDefault(item => item.Name.Equals("Game Board"));

            if (layoutItem != null)
            {
                Layout lyt = await QueuedTask.Run(() => layoutItem.GetLayout());

                //Next check to see if a layout view is already open that referencs the Game Board layout
                foreach (var pane in ProApp.Panes)
                {
                    var lytPane = pane as ILayoutPane;
                    if (lytPane == null) //if not a layout view, continue to the next pane
                    {
                        continue;
                    }
                    if (lytPane.LayoutView.Layout == lyt) //if there is a match, activate the view
                    {
                        (lytPane as Pane).Activate();
                        System.Windows.MessageBox.Show("Activating existing pane");
                        return;
                    }
                }

                //If panes don't exist, then open a new pane
                await ProApp.Panes.CreateLayoutPaneAsync(lyt);

                System.Windows.MessageBox.Show("Opening already existing layout");
                return;
            }

            //The layout does not exist so create a new one
            Layout layout = await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run <Layout>(() =>
            {
                //*** CREATE A NEW LAYOUT ***

                //Set up a page
                CIMPage newPage = new CIMPage();
                //required properties
                newPage.Width  = 17;
                newPage.Height = 11;
                newPage.Units  = LinearUnit.Inches;

                //optional rulers
                newPage.ShowRulers            = true;
                newPage.SmallestRulerDivision = 0.5;

                layout = LayoutFactory.Instance.CreateLayout(newPage);
                layout.SetName("Game Board");

                //*** INSERT MAP FRAME ***

                // create a new map with an ArcGIS Online basemap
                Map map = MapFactory.Instance.CreateMap("World Map", MapType.Map, MapViewingMode.Map, Basemap.NationalGeographic);

                //Build map frame geometry
                Coordinate2D ll = new Coordinate2D(4, 0.5);
                Coordinate2D ur = new Coordinate2D(13, 6.5);
                Envelope env    = EnvelopeBuilder.CreateEnvelope(ll, ur);

                //Create map frame and add to layout
                MapFrame mfElm = LayoutElementFactory.Instance.CreateMapFrame(layout, env, map);
                mfElm.SetName("Main MF");

                //Set the camera
                Camera camera = mfElm.Camera;
                camera.X      = 3365;
                camera.Y      = 5314468;
                camera.Scale  = 175000000;
                mfElm.SetCamera(camera);

                //*** INSERT TEXT ELEMENTS ***

                //Title text
                Coordinate2D titleTxt_ll   = new Coordinate2D(6.5, 10);
                CIMTextSymbol arial36bold  = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlueRGB, 36, "Arial", "Bold");
                GraphicElement titleTxtElm = LayoutElementFactory.Instance.CreatePointTextGraphicElement(layout, titleTxt_ll, "Feeling Puzzled?", arial36bold);
                titleTxtElm.SetName("Title");

                //Instuctions text
                Coordinate2D recTxt_ll = new Coordinate2D(4.25, 6.5);
                Coordinate2D recTxt_ur = new Coordinate2D(13, 9.75);
                Envelope recEnv        = EnvelopeBuilder.CreateEnvelope(recTxt_ll, recTxt_ur);
                CIMTextSymbol arial18  = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.GreyRGB, 20, "Arial", "Regular");
                string text            = "<bol>Instructions:</bol> " +
                                         "\n\n  - Activate the map frame below and pan / zoom to desired extent" +
                                         "\n\n  - Close map frame activation" +
                                         "\n\n  - Click the 'Scramble Pieces' command" as String;
                GraphicElement recTxtElm = LayoutElementFactory.Instance.CreateRectangleParagraphGraphicElement(layout, recEnv, text, arial18);
                recTxtElm.SetName("Instructions");

                //Service layer credits
                Coordinate2D slcTxt_ll   = new Coordinate2D(0.5, 0.2);
                Coordinate2D slcTxt_ur   = new Coordinate2D(16.5, 0.4);
                Envelope slcEnv          = EnvelopeBuilder.CreateEnvelope(slcTxt_ll, slcTxt_ur);
                CIMTextSymbol arial8reg  = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlackRGB, 8, "Arial", "Regular");
                String slcText           = "<dyn type='layout' name='Game Board' property='serviceLayerCredits'/>";
                GraphicElement slcTxtElm = LayoutElementFactory.Instance.CreateRectangleParagraphGraphicElement(layout, slcEnv, slcText, arial8reg);
                slcTxtElm.SetName("SLC");

                //Status and results text (blank to start)
                Coordinate2D statusTxt_ll   = new Coordinate2D(4.5, 7);
                CIMTextSymbol arial24bold   = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlackRGB, 24, "Arial", "Bold");
                GraphicElement statusTxtElm = LayoutElementFactory.Instance.CreatePointTextGraphicElement(layout, statusTxt_ll, "", arial24bold);
                statusTxtElm.SetName("Status");
                return(layout);
            });

            //*** OPEN LAYOUT VIEW (must be in the GUI thread) ***
            var layoutPane = await ProApp.Panes.CreateLayoutPaneAsync(layout);

            var sel = layoutPane.LayoutView.GetSelectedElements();

            if (sel.Count > 0)
            {
                layoutPane.LayoutView.ClearElementSelection();
            }
        }
        //public async Task UpdateThumbsAsync()
        //{
            
        //    //return Task.Run(() =>
        //    //{
        //    var commandId = DAML.Gallery.esri_mapping_previewBasemapGallery;
        //    var checkboxid = DAML.Checkbox.esri_core_previewShowBasemap;
        //    var iCommand = FrameworkApplication.GetPlugInWrapper(commandId) as ICommand;
        //    var checkboxiCommand = FrameworkApplication.GetPlugInWrapper(checkboxid) as ICommand;

        //    var ttype = iCommand.GetType();
        //    Task<(MapFrame, Map)> ttest = QueuedTask.Run(() =>
        //    {
        //        Guid g = Guid.NewGuid();
        //        string tempLayout = "TempLayout_"+g;
        //        string tempMap = "TempMap_"+g;
        //        //var newmap = MapFactory.Instance.CreateMap("NewMap", basemap:Basemap.ProjectDefault);
        //        // Create a new CIM page
        //        CIMPage newPage = new CIMPage();

        //        // Add properties

        //        newPage.Width = 17;
        //        newPage.Height = 11;
        //        newPage.Units = LinearUnit.Inches;

        //        // Add rulers
        //        newPage.ShowRulers = true;
        //        newPage.SmallestRulerDivision = 0.5;

        //        // Apply the CIM page to a new layout and set name
        //        var newLayout = LayoutFactory.Instance.CreateLayout(newPage);
        //        newLayout.SetName(tempLayout);
        //        var newMap = MapFactory.Instance.CreateMap(tempMap, basemap: Basemap.ProjectDefault);
        //        //Map newMap = MapFactory.Instance.CreateMap(tempMap, MapType.Map, MapViewingMode.Map, Basemap.Terrain);
        //        //string url = @"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer";
                
        //        // Build a map frame geometry / envelope
        //        Coordinate2D ll = new Coordinate2D(1, 0.5);
        //        Coordinate2D ur = new Coordinate2D(13, 9);
        //        Envelope mapEnv = EnvelopeBuilder.CreateEnvelope(ll, ur);

        //        // Create a map frame and add it to the layout
        //        MapFrame newMapframe = LayoutElementFactory.Instance.CreateMapFrame(newLayout, mapEnv, newMap);
        //        newMapframe.SetName("Map Frame");

        //        return (newMapframe, newMap);
        //    });
        //    ttest.Wait();
        //    MapFrame tempframe = ttest.Result.Item1;
        //    Map tempmap = ttest.Result.Item2;
        //    foreach (var iitem in Project.Current.SelectedItems)
        //    {
        //        Task t = QueuedTask.Run(() =>
        //        {
        //            tempmap.RemoveLayers(tempmap.Layers.AsEnumerable());
        //            Guid gg = Guid.NewGuid();
        //            Uri uri = new Uri(iitem.Path);
        //            var lyr = LayerFactory.Instance.CreateLayer(uri, tempmap);
        //            string thumbpath = String.Format(_temppath + "{0}_{1}.jpg", lyr.Name, gg);
        //            Uri item_uri = new Uri(iitem.Path);
        //            var lyr_object = LayerFactory.Instance.CreateLayer(item_uri, tempmap);
        //            string tpath = String.Format(_temppath + "{0}_{1}.jpg", lyr.Name, gg);
        //            //MessageBox.Show(thumbpath);

        //            tempframe.SetCamera(lyr_object.QueryExtent());
        //            //Create JPEG format with appropriate settings
        //            JPEGFormat JPEG = new JPEGFormat();
        //            JPEG.HasWorldFile = false;
        //            //JPEG.Resolution = 100;
        //            JPEG.OutputFileName = thumbpath;
        //            //Export MapFrame
        //            //Layout lyt = layoutItem.GetLayout(); //Loads and returns the layout associated with a LayoutItem
        //            tempframe.Export(JPEG);

        //            byte[] b = File.ReadAllBytes(thumbpath);
        //            //string utf8string = Encoding.UTF8.GetString(b, 0, b.Length);
        //            //string asciistring = Encoding.ASCII.GetString(b, 0, b.Length);
        //            string b64string = Convert.ToBase64String(b);

        //            string xxml = iitem.GetXml();
        //            XmlDocument xmldoc = new XmlDocument();
        //            xmldoc.LoadXml(xxml);
        //            //xmldoc.Save("C:\\Users\\jmaxm\\Desktop\\expxml.xml");
        //            //todo create new xml if not exist
        //            XmlNode root = xmldoc.DocumentElement;
        //            XmlNode thumb = root.SelectSingleNode("descendant::Binary/Thumbnail/Data");
        //            if (thumb is null)
        //            {
        //                if (root.SelectSingleNode("descendant::Binary") is null)
        //                {
        //                    XmlNode binarynode = xmldoc.CreateNode("element", "Binary", "");
        //                    XmlNode thumbnode = xmldoc.CreateNode("element", "Thumbnail", "");
        //                    XmlNode datanode = xmldoc.CreateNode("element", "Data", "");
        //                    ((XmlElement)datanode).SetAttribute("EsriPropertyType", "PictureX");
        //                    //datanode.Attributes["EsriPropertyType"].Value = "PictureX";
        //                    datanode.InnerText = b64string;
        //                    thumbnode.AppendChild(datanode);
        //                    binarynode.AppendChild(thumbnode);
        //                    root.AppendChild(binarynode);
        //                    string newmeta = xmldoc.OuterXml;

        //                    iitem.SetXml(newmeta);
        //                }
        //            }
        //            if (thumb != null)
        //            {
        //                root.SelectSingleNode("descendant::Binary/Thumbnail/Data").InnerText = b64string;
        //                //var thumb = xmldoc.GetElementsByTagName("Thumbnail")[0].SelectSingleNode("Data");
        //                //thumb.SelectSingleNode("Data")
        //                //MessageBox.Show(thumb.InnerXml.ToString());

        //                string newmeta = xmldoc.OuterXml;

        //                iitem.SetXml(newmeta);

        //            }
        //            //xmldoc.Save("C:\\Users\\jmaxm\\Desktop\\expxml.xml");
        //            File.Delete(thumbpath);
        //            FrameworkApplication.AddNotification(new Notification()
        //            {
        //                Title = "Updated Metadata Thumbnail",
        //                Message = iitem.Path,
        //                ImageUrl = @"pack://*****:*****@"pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/ErrorException32.png",

                    });
                    continue;
                }


            QueuedTask.Run(() =>
                {
                    Guid g = Guid.NewGuid();
                    string tempLayout = "TempLayout";
                    string tempMap = "TempMap";
                    //var newmap = MapFactory.Instance.CreateMap("NewMap", basemap:Basemap.ProjectDefault);
                    // Create a new CIM page
                    CIMPage newPage = new CIMPage();

                    // Add properties

                    newPage.Width = 17;
                    newPage.Height = 11;
                    newPage.Units = LinearUnit.Inches;

                    // Add rulers
                    newPage.ShowRulers = true;
                    newPage.SmallestRulerDivision = 0.5;

                    // Apply the CIM page to a new layout and set name
                    var newLayout = LayoutFactory.Instance.CreateLayout(newPage);
                    newLayout.SetName(tempLayout);
                    //string bmap_string = EMEMenu_thumbnailBasemap.thumbnailBasemap.selected;
                    //Basemap bmap = (Basemap)Enum.Parse(typeof(Basemap), bmap_string);
                    Basemap bmap = (Basemap)Enum.Parse(typeof(Basemap), basemap);
                    Map newMap = MapFactory.Instance.CreateMap(tempMap, MapType.Map, MapViewingMode.Map, bmap);

                    Uri uri = new Uri(item.Path);
                    var lyr = LayerFactory.Instance.CreateLayer(uri, newMap);
                    string thumbpath = String.Format(_temppathEme + "{0}.jpg", g);
                    
                    

                    // Build a map frame geometry / envelope
                    Coordinate2D ll = new Coordinate2D(1, 0.5);
                    Coordinate2D ur = new Coordinate2D(13, 9);
                    Envelope mapEnv = EnvelopeBuilder.CreateEnvelope(ll, ur);

                    // Create a map frame and add it to the layout
                    MapFrame newMapframe = LayoutElementFactory.Instance.CreateMapFrame(newLayout, mapEnv, newMap);
                    newMapframe.SetName("Map Frame");

                    // Create and set the camera
                    //Camera camera = newMapframe.Camera;
                    //camera.X = -118.465;
                    //camera.Y = 33.988;
                    //camera.Scale = 30000;
                    newMapframe.SetCamera(lyr.QueryExtent());
                    //newMapframe.ZoomTo(lyr.QueryExtent());

                    //Create JPEG format with appropriate settings
                    JPEGFormat JPEG = new JPEGFormat();
                    JPEG.HasWorldFile = false;
                    JPEG.Resolution = 100;
                    JPEG.OutputFileName = thumbpath;
                    //Export MapFrame
                    //Layout lyt = layoutItem.GetLayout(); //Loads and returns the layout associated with a LayoutItem
                    newMapframe.Export(JPEG);
                    LayoutProjectItem layoutItem = Project.Current.GetItems<LayoutProjectItem>().FirstOrDefault(itm => itm.Name.Equals(tempLayout));
                    Project.Current.RemoveItem(Project.Current.GetItems<LayoutProjectItem>().FirstOrDefault(itm => itm.Name.Equals(tempLayout)));
                    Project.Current.RemoveItem(Project.Current.GetItems<MapProjectItem>().FirstOrDefault(itm => itm.Name.Equals(tempMap)));
                    byte[] b = File.ReadAllBytes(thumbpath);
                    //string utf8string = Encoding.UTF8.GetString(b, 0, b.Length);
                    //string asciistring = Encoding.ASCII.GetString(b, 0, b.Length);
                    string b64string = Convert.ToBase64String(b);

                    string xxml = item.GetXml();
                    XmlDocument xmldoc = new XmlDocument();
                    xmldoc.LoadXml(xxml);
                    //xmldoc.Save("C:\\Users\\jmaxm\\Desktop\\expxml.xml");
                    //todo create new xml if not exist
                    XmlNode root = xmldoc.DocumentElement;
                    XmlNode thumb = root.SelectSingleNode("descendant::Binary/Thumbnail/Data");
                    if (thumb is null)
                    {
                        if (root.SelectSingleNode("descendant::Binary") is null)
                        {
                            XmlNode binarynode = xmldoc.CreateNode("element", "Binary", "");
                            XmlNode thumbnode = xmldoc.CreateNode("element", "Thumbnail", "");
                            XmlNode datanode = xmldoc.CreateNode("element", "Data", "");
                            ((XmlElement)datanode).SetAttribute("EsriPropertyType", "PictureX");
                            //datanode.Attributes["EsriPropertyType"].Value = "PictureX";
                            datanode.InnerText = b64string;
                            thumbnode.AppendChild(datanode);
                            binarynode.AppendChild(thumbnode);
                            root.AppendChild(binarynode);
                            string newmeta = xmldoc.OuterXml;

                            item.SetXml(newmeta);
                        }
                    }
                    if(thumb != null)
                    {
                        root.SelectSingleNode("descendant::Binary/Thumbnail/Data").InnerText = b64string;
                        //var thumb = xmldoc.GetElementsByTagName("Thumbnail")[0].SelectSingleNode("Data");
                        //thumb.SelectSingleNode("Data")
                        //MessageBox.Show(thumb.InnerXml.ToString());

                        string newmeta = xmldoc.OuterXml;

                        item.SetXml(newmeta);
                        //MessageBox.Show(item.Type);

                    }
                    //xmldoc.Save("C:\\Users\\jmaxm\\Desktop\\expxml.xml");
                    File.Delete(thumbpath);

                });
                FrameworkApplication.AddNotification(new Notification()
                {
                    Title = "Updated Metadata Thumbnail",
                    Message = item.Path,
                    ImageUrl = @"pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/GenericRefresh32.png",

                });
            }
        }