2009-05-21 101 views
0

我正在使用此代碼在ArcMap中創建文本。但當我放大時,我似乎無法像註釋文本那樣將其縮放。有沒有辦法讓圖形文本在ArcMap中縮放?

有沒有人知道如何做到這一點?

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

回答

1

我們可以很好地添加文本,根據比例改變它的大小。爲此,我們需要使用IElementProperties3.ReferenceScale屬性。

我沒有C#代碼,但附加了一些可以修改的示例VBA代碼。

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

據我所知,你不能得到一個TextSymbol與地圖一起縮放。這是因爲TextElement根據地圖的範圍不可更改,而是使用字體大小來確定它將在屏幕上顯示的大小。

我仍然可以想到在使用TextSymbol的同時,最好的方法是在範圍更改時更改點的大小(並且,如果範圍足夠大,則隱藏/顯示元素)。我不知道一個「關注程度的文本控制」,這是你真正需要的。

或者,你不能只使用一個註釋圖層或標籤圖層,你想要文本大小改變?

+0

我正在構建一個將尺寸放在包裹上的工具。我們需要讓客戶端變得非常容易,因此我試圖使用圖形文本來定位和設置文本的大小,然後在用戶對文本所在的位置感到滿意後,該工具將其保存在註釋層中。 – 2009-05-21 14:14:43

0

ITextElement得到了一個屬性ITextElement.ScaleText。將其設置爲true,文本大小將自動調整。

相關問題