2009-05-21 7 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

Я строю инструмент для измерения размеров на посылках. Нам нужно сделать это очень легко для клиента, поэтому я пытаюсь использовать графический текст для размещения и установки размера текста, а затем инструмент сохранит его на уровне аннотации после того, как пользователь будет счастлив, где текст. –

+0

Я разговаривал с нашим «парнем ГИС» (мой босс), и самое лучшее, что мы могли бы придумать, - это слой аннотации с ярлыками пакетов, а затем позволить вашему клиенту вручную перемещать метки внутри слоя аннотации. Таким образом, вы сохраняете изменения размера и размера текста, а также позволяете перемещать текст вокруг. –

+0

"к слою аннотации" = "для создания слоя аннотации" –

0

The ITextElement имеет свойство ITextElement.ScaleText. Установите это значение true, и размер текста будет автоматически адаптирован.