public GraphicElement Clone( string suffix )
Public Function Clone( _ Optional ByVal suffix As String _ ) As GraphicElement
Parameters
- suffix
- String
public GraphicElement Clone( string suffix )
Public Function Clone( _ Optional ByVal suffix As String _ ) As GraphicElement
Exception | Description |
---|---|
ArcGIS.Core.CalledOnWrongThreadException | This method must be called within the lambda passed to QueuedTask.Run. |
System.InvalidOperationException | Map has reached maximum graphics count limit of 4000 elements. One or more elements cannot be created. |
System.InvalidOperationException | Map has reached maximum graphics size limit of 10 MB. One or more elements cannot be created. |
suffix
parameter is an optional string that is used to tag each newly created GraphicElement. The new element will get the same element name as the parent graphic plus the suffix value along with a numeric sequencer. This makes it possible, if needed, to find and remove unwanted cloned items.//This example finds a layout element by name and clones it a specified number of times and applies an accumlative offset for each //cloned element. //Added references using ArcGIS.Core.CIM; //CIM using ArcGIS.Desktop.Core; //Project using ArcGIS.Desktop.Layouts; //Layout class using ArcGIS.Desktop.Framework.Threading.Tasks; //QueuedTask public class GraphicElementExample2 { public static Task<bool> CloneElementAsync(string LayoutName, string ElementName, double offset, int numCopies) { //Reference a layoutitem in a project by name LayoutProjectItem layoutItem = Project.Current.GetItems<LayoutProjectItem>().FirstOrDefault(item => item.Name.Equals(LayoutName)); if (layoutItem == null) return Task.FromResult(false); return QueuedTask.Run<bool>(() => { //Reference and load the layout associated with the layout item Layout lyt = layoutItem.GetLayout(); //Reference a element by name GraphicElement graElm = lyt.FindElement(ElementName) as GraphicElement; if (graElm == null) return false; //Loop through the number of copies, clone, and set the offsets for each new element double orig_offset = offset; while (numCopies != 0) { GraphicElement cloneElm = graElm.Clone("Clone"); cloneElm.SetX(cloneElm.GetX() + offset); cloneElm.SetY(cloneElm.GetY() - offset); offset = offset + orig_offset; numCopies = numCopies - 1; } return true; }); } }
//Note: call within QueuedTask.Run() GraphicElement cloneElm = graElm.Clone("Clone");
//Clone a layout graphic element and apply an offset. //Perform on the worker thread QueuedTask.Run(() => { // Reference and load the layout associated with the layout item Layout layout = layoutItem.GetLayout(); if (layout != null) { // Reference a graphic element by name GraphicElement graphicElement = layout.FindElement("MyElement") as GraphicElement; if (graphicElement != null) { //Clone and set the new x,y GraphicElement cloneElement = graphicElement.Clone("Clone"); cloneElement.SetX(cloneElement.GetX() + xOffset); cloneElement.SetY(cloneElement.GetY() + yOffset); } } });
Target Platforms: Windows 11, Windows 10