Frage

Ich verwende diesen Code Text in ArcMap zu erstellen. Aber ich kann nicht scheinen, um es zu bekommen, wie Anmerkungstext zu skalieren, wenn Sie die Ansicht vergrößern.

Wer weiß, wie dies zu tun?

//'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;
War es hilfreich?

Lösung

Wir können sehr gut Text hinzufügen, die es Größe ändert sich entsprechend der Skala. Dazu benötigen wir das IElementProperties3.ReferenceScale Eigentum nutzen.

Ich habe keine C # -Code, aber einige Beispiel-VBA-Code bin Befestigung, die Sie ändern können.

'--------------------------------
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
'--------------------------------

Andere Tipps

Mein Wissen kann man nicht ein TextSymbol maßstab zusammen mit der Karte zu bekommen. Das ist, weil das Textelement nicht änderbar ist, basierend auf den Umfang der Karte, sondern stattdessen verwendet die Schriftgröße zu bestimmen, wie groß sie auf dem Bildschirm erscheinen los ist.

Die beste Art, die ich mir vorstellen kann, es zu tun, während immer noch ein TextSymbol verwendet, ist die Punktgröße zu ändern (und, wenn das Ausmaß der groß genug ist, verstecken / zeigen das Element) als Ausmaß ändert. Ich weiß nicht, von einer „Textkontrolle, die Aufmerksamkeit auf das Ausmaß zahlt“, das, was man wirklich braucht.

Alternativ könnten Sie nicht einfach eine Anmerkung Schicht verwenden oder die Schicht beschriften, wo Sie die Textgröße zu ändern?

Die ITextElement hat eine Eigenschaft ITextElement.ScaleText bekommt. Setzen Sie dies auf true und die Textgröße passt sich automatisch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top