ArcGIS Pro 3.7 API Reference Guide
ArcGIS.Desktop.Layouts Namespace / GraphicElement Class / GetGraphic Method
Example

In This Topic
    GetGraphic Method (GraphicElement)
    In This Topic
    Returns a CIMGraphic which is a CIM representation of the graphic specific attributes for a GraphicElement. This method must be called on the MCT. Use QueuedTask.Run.
    Syntax
    Public Function GetGraphic() As CIMGraphic
    public CIMGraphic GetGraphic()

    Return Value

    Exceptions
    ExceptionDescription
    This method must be called within the lambda passed to QueuedTask.Run.
    Example
    Create Rectangle Paragraph Text Element 1
    {
      //Note: Must be on QueuedTask.Run
      //Create rectangle text with background and border symbology.  
      //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 = PolygonBuilderEx.CreatePolygon(plyCoords);
    
      //Set symbology, create and add element to layout
      //Also notice how formatting tags are using within the text string.
      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 = ElementFactory.Instance.CreateTextGraphicElement(
        layout, TextType.RectangleParagraph, poly, sym, text, "Polygon Paragraph");
    
      //(Optionally) Modify paragraph border 
      CIMGraphic polyTxtGra = polyTxtElm.GetGraphic();
      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);
    }
    Create a new picture element with advanced symbol settings
    {
      //Create a picture element and also set background and border symbology.
    
      //Note: Must be on QueuedTask.Run
    
      //Build 2D envelope geometry
      Coordinate2D pic_ll = new Coordinate2D(6, 1);
      Coordinate2D pic_ur = new Coordinate2D(8, 2);
      Envelope env = EnvelopeBuilderEx.CreateEnvelope(pic_ll, pic_ur);
    
      //Create and add element to layout
      string picPath = @"C:\Temp\WhitePass.jpg";
    
      GraphicElement picElm = ElementFactory.Instance.CreatePictureGraphicElement(
                                           layout, env, picPath, "New Picture");
    
      //(Optionally) Modify the border and shadow 
      CIMGraphic picGra = picElm.GetGraphic();
      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);
    
      //Update the element
      picElm.SetGraphic(picGra);
    }
    Find layout elements
    {
      //Note: Must be on QueuedTask.Run
      //Find elements by name
      var layoutElementsToFind = layout.FindElements(new List<string>() { "Point 1", "Line 3", "Text 1" });
      //Get the collection of elements from the page layout. Nesting within GroupElement is preserved.
      var elementCollection = layout.GetElements();
      //Get the collection of Element from the page layout as a flattened list. Nested groups within GroupElement are not preserved.
      var elements = layout.GetElementsAsFlattenedList();
      //Convert collection of the elements to a collection of GraphicElements.
      var graphicElements = elements.ToList().ConvertAll(x => (GraphicElement)x);
      //Find elements by type
      //Find all point graphics in the Layout
      var pointGraphics = graphicElements.Where(elem => elem.GetGraphic() is CIMPointGraphic);
      //Find all line graphics in the Graphics Layer
      var lineGraphics = graphicElements.Where(elem => elem.GetGraphic() is CIMLineGraphic);
      ////Find all polygon graphics in the Graphics Layer
      var polyGraphics = graphicElements.Where(elem => elem.GetGraphic() is CIMPolygonGraphic);
      ////Find all text graphics in the Graphics Layer
      var textGraphics = graphicElements.Where(elem => elem.GetGraphic() is CIMTextGraphic);
      ////Find all picture graphics in the Graphics Layer
      var pictureGraphic = graphicElements.Where(elem => elem.GetGraphic() is CIMPictureGraphic);
    }
    Update an elements transparency
    {
      //Update an element's transparency using the CIM.
    
      //Note: Must be on QueuedTask.Run
    
      // Reference a element by name
      GraphicElement graphicElement = layout.FindElement("MyElement") as GraphicElement;
      if (graphicElement != null)
      {
        // Modify the Transparency property that exists only in the CIMGraphic class.
        CIMGraphic CIMGraphic = graphicElement.GetGraphic() as CIMGraphic;
        CIMGraphic.Transparency = 50; // mark it 50% transparent
        graphicElement.SetGraphic(CIMGraphic);
      }
    }
    Create a new field in the report
    {
      //This is the gap between two fields
      double fieldIncrement = 0.9388875113593206276389;
      //On the QueuedTask
      //New field to add.
      var newReportField = new CIMReportField
      {
        Name = "POP1990",
        FieldOrder = 2,
      };
      //Get the "ReportSection element"				
      var mainReportSection = report.Elements.OfType<ReportSection>().FirstOrDefault();
      if (mainReportSection == null) return;
    
      //Get the "ReportDetails" within the ReportSectionElement. ReportDetails is where "fields" are.
      var reportDetailsSection = mainReportSection?.Elements.OfType<ReportDetails>().FirstOrDefault();
      if (reportDetailsSection == null) return;
    
      //Within ReportDetails find the envelope that encloses a field.
      //We get the first CIMParagraphTextGraphic in the collection so that we can add the new field next to it.					
      var lastFieldGraphic = reportDetailsSection.Elements.FirstOrDefault((r) =>
      {
        var gr = r as GraphicElement;
        if (gr == null) return false;
        return (gr.GetGraphic() is CIMParagraphTextGraphic ? true : false);
      });
      //Get the Envelope of the last field
      var graphicBounds = lastFieldGraphic.GetBounds();
    
      //Min and Max values of the envelope
      var xMinOfFieldEnvelope = graphicBounds.XMin;
      var yMinOfFieldEnvelope = graphicBounds.YMin;
    
      var xMaxOfFieldEnvelope = graphicBounds.XMax;
      var YMaxOfFieldEnvelope = graphicBounds.YMax;
      //create the new Envelope to be offset from the existing field
    
      MapPoint newMinPoint = MapPointBuilderEx.CreateMapPoint(xMinOfFieldEnvelope + fieldIncrement, yMinOfFieldEnvelope);
      MapPoint newMaxPoint = MapPointBuilderEx.CreateMapPoint(xMaxOfFieldEnvelope + fieldIncrement, YMaxOfFieldEnvelope);
      Envelope newFieldEnvelope = EnvelopeBuilderEx.CreateEnvelope(newMinPoint, newMaxPoint);
    
      //Create field
      GraphicElement fieldGraphic = ReportElementFactory.Instance.CreateFieldValueTextElement(reportDetailsSection, newFieldEnvelope, newReportField);
    }
    Modify symbology of a Graphic Element
    {
      // Note: must be called on the QueuedTask
      {
        //within a queued Task
        //get the first line element in the layer
        var ge = graphicsLayer.FindElement("Line 10") as GraphicElement;
        var graphic = ge.GetGraphic();
        if (graphic is CIMLineGraphic lineGraphic)
        {
          //change its symbol
          lineGraphic.Symbol =
           SymbolFactory.Instance.ConstructLineSymbol(
             SymbolFactory.Instance.ConstructStroke(
         ColorFactory.Instance.BlueRGB, 2, SimpleLineStyle.DashDot)).MakeSymbolReference();
          //apply the change
          ge.SetGraphic(lineGraphic);
        }
      }
    }
    Requirements

    Target Platforms: Windows 11 Home, Pro, Enterprise (64 bit)

    ArcGIS Pro version: 3.0 or higher.
    See Also