Howto: 确定注记要素类中哪些符号的属性被覆盖

文章编号 : 30204
软件: ArcGIS - ArcEditor 9.0, 9.1, 9.2, 9.3, 9.3.1 ArcGIS - ArcInfo 9.0, 9.1, 9.2, 9.3, 9.3.1 ArcGIS - ArcView 9.0, 9.1, 9.2, 9.3, 9.3.1
操作系统: N/A
已邀请:

EsriSupport

赞同来自:

摘要: 本文介绍了如何通过VBA代码确定注记要素类中哪些符号的属性被覆盖。在VBA窗口中代码显示了覆盖值。 在9.x中,注记要素类中的覆盖字段是由ArcGIS维护的、不可编辑的字段。当覆盖字段值是0时, 注记要素通过符号ID对应的文字符号来显示,覆盖字段中没有存储任何显示属性。当覆盖字段值大于0时,注记要素将符号ID对应的符号作为默认显示样式,然后应用覆盖字段中的显示属性。 如果注记要素没有引用符号表中的符号,覆盖字段值是0,符号ID字段值是-1。下表中列出了可能出现的值。属性表中看到的值是这些值的和:



例如,如果覆盖字段的值是65,是因为XOffset(1)和Size(64)属性值被覆盖(1+64=65)。
内容:
使用下面的代码示例来显示属性被覆盖的注记要素ID。
1. 启动 ArcMap。
2. 打开 Visual Basic Editor。 在ArcMap中,选择 Tools > Macros > Visual Basic Editor。
3. 在项目资源管理器中,展开Project.mxt,并导航至 ArcMap Objects > ThisDocument,右键点击,选择查看代码。




项目中 ThisDocument 代码模块仅在当前的地图文档上运行。如果想将代码存储到所有地图文档,需要打开 Normal.mxt 的ThisDocument 代码模块。

4. 复制以下代码到代码模块:

Public Sub GetFeatureandReportOverrides()

Dim pMxDoc As IMxDocument
Dim pFL As IFeatureLayer
Dim pFeature As IFeature
Dim pAnnoFeat As IAnnotationFeature
Dim pElement As IElement
Dim pSymbolCollectionElement As ISymbolCollectionElement
Dim pQF As IQueryFilter
Dim pFeatureCursor As IFeatureCursor
Dim OID As Long

Set pMxDoc = ThisDocument
Set pFL = pMxDoc.ActiveView.FocusMap.Layer(0)

If TypeOf pFL Is IAnnotationLayer Then
Set pFeatureCursor = pFL.Search(pQF, False)

Set pFeature = pFeatureCursor.NextFeature

Do Until pFeature Is Nothing
OID = pFeature.OID
Set pAnnoFeat = pFeature
Set pElement = pAnnoFeat.Annotation
If TypeOf pElement Is ISymbolCollectionElement Then
Set pSymbolCollectionElement = pElement
If pSymbolCollectionElement.SymbolID = -1 Then
Debug.Print "Feature " & OID & " does not reference a symbol in the symbol collection"
Else
ReportOverrides OID, pSymbolCollectionElement.OverriddenProperties
End If
Else
Debug.Print "Feature " & OID & " is not a text element"
End If

Set pFeature = pFeatureCursor.NextFeature

Loop

Else
Debug.Print "The first layer in the map is not a Geodatabase Annotation layer"
End If

End Sub


Public Sub ReportOverrides(OID As Long, lngOverrideVal As Long)

Debug.Print "Feature " & OID & " has the following overrides:"

'lookup the overrides
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideXOffset) <= lngOverrideVal Then _
Debug.Print "X Offset"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideYOffset) <= lngOverrideVal Then _
Debug.Print "YOffset"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideHorzAlignment) <= lngOverrideVal Then _
Debug.Print "Horizontal Alignment"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideVertAlignment) <= lngOverrideVal Then _
Debug.Print "Vertical Alignment"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideFlipAngle) <= lngOverrideVal Then _
Debug.Print "Flip Angle"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideSize) <= lngOverrideVal Then _
Debug.Print "Size"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideColor) <= lngOverrideVal Then _
Debug.Print "Color"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideCharSpacing) <= lngOverrideVal Then _
Debug.Print "Character Spacing"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideCharWidth) <= lngOverrideVal Then _
Debug.Print "Character Width"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideWordSpacing) <= lngOverrideVal Then _
Debug.Print "Word Spacing"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideLeading) <= lngOverrideVal Then _
Debug.Print "Leading"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideBold) <= lngOverrideVal Then _
Debug.Print "Bold"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideItalic) <= lngOverrideVal Then _
Debug.Print "Italic"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideUnderline) <= lngOverrideVal Then _
Debug.Print "Underline"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideBackground) <= lngOverrideVal Then _
Debug.Print "Background"
If (lngOverrideVal Xor esriSymbolOverrideEnum.esriSymbolOverrideFontName) <= lngOverrideVal Then _
Debug.Print "Font Name"

Debug.Print " " 'a space for formatting

End Sub
5. 选择 Run > Run Sub/User Form,运行代码。

6. 在 VBA 即时窗口中代码会显示覆盖值。在 VBA 编辑器中,导航至 View > Immediate window ,打开此窗口。




创建时间:2005-12-21
最近更新: 2011-05-03


原文链接
http://support.esrichina.com.c ... .html

要回复问题请先登录注册