Search code examples
gisarcgisarcobjectsarcmap

Is there a way to get graphic text to scale in ArcMap?


I'm using this code to create text in ArcMap. But I can't seem to get it to scale like annotation text when you zoom in.

Does anyone know how to do this?

//'First setup a color.  We'll use RGB red    
                IRgbColor pRGBcolor = new RgbColor();
                pRGBcolor.Blue = 0;
                pRGBcolor.Red = 255;
                pRGBcolor.Green = 0;

                //'Next, cocreate a new TextElement    
                ITextElement pTextElement = new TextElementClass();

                //'Query Interface (QI) to an IElement pointer and set    
                //'the geometry that was passed in    
                IElement pElement = pTextElement as IElement;
                pElement.Geometry = Point;

                //'Next, setup a font
                stdole.IFontDisp pFontDisp = new stdole.StdFont() as stdole.IFontDisp;
                pFontDisp.Name = "Arial";
                pFontDisp.Bold = true;

                //'Next, setup a TextSymbol that the TextElement will draw with    
                ITextSymbol pTextSymbol = new ESRI.ArcGIS.Display.TextSymbolClass();
                pTextSymbol.Font = pFontDisp;
                pTextSymbol.Color = pRGBcolor;
                pTextSymbol.Size = Size;
                pTextSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHACenter;
                pTextSymbol.VerticalAlignment = esriTextVerticalAlignment.esriTVACenter;
                pTextSymbol.Angle = Angle;
                pTextSymbol.Text = Text;

                //'set the size of the text symbol here, rather than on the font        
                //'Next, Give the TextSymbol and text string to the TextElement    
                pTextElement.Symbol = pTextSymbol;
                pTextElement.Text = pTextSymbol.Text;
                pTextElement.ScaleText = true;

                ESRI.ArcGIS.Carto.IElementProperties3 aoElementPro = pTextElement as ESRI.ArcGIS.Carto.IElementProperties3;
                aoElementPro.ReferenceScale = cGISHelpers.MapDomain.Map.MapScale;

Solution

  • We can very well add text which changes it size according to the scale. for this, we need to use the IElementProperties3.ReferenceScale Property.

    I do not have C# code, but am attaching some sample VBA code that you can modify.

    '--------------------------------
    Sub ChangeTextElemRefScale()
        Dim pDoc As IMxDocument
        Dim pContainer As IGraphicsContainer
        Dim pElement As IElement
        Dim pTextElement As ITextElement
        Dim pActiveView As IActiveView
    
        Set pDoc = ThisDocument
        Set pActiveView = pDoc.ActiveView
        Set pContainer = pActiveView
    
        'Loop through the graphics container
        pContainer.Reset
        Set pElement = pContainer.Next
        While not pElement Is Nothing
            'Get the specific text element
            If TypeOf pElement Is ITextElement Then
               Set pTextElement = pElement
               If pTextElement.Text = "oregon" Then  'change this to your text element's text
                    Dim pElemProp As IElementProperties3
                    Set pElemProp = pTextElement
                    pElemProp.ReferenceScale = 15000000
                End If
            End If
            Set pElement = pContainer.Next
        Wend
    
        pDoc.ActiveView.PartialRefresh esriViewGraphics, Nothing, Nothing
    End Sub
    '--------------------------------