Gibt es eine Möglichkeit grafischen Text zu skalieren in ArcMap zu bekommen?
-
23-08-2019 - |
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;
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.