Графика из слоя "<Default>"

0 голосов
спросил 15 Ноя, 05 от Mitrich (13,680 баллов) в категории Программные продукты Esri
Как выбрать объекты, расположенные ТОЛЬКО на слое аннотаций  "<Default>"? Какой контейнер использовать?
И в догонку: как сравнить два Элемента на предмет их идентичности. Через клон-клон, как-то не получается. Может что не правильно делаю?

Спасибо.

5 Ответы

0 голосов
ответил 15 Ноя, 05 от Alexander1 (32,520 баллов)

Посмотри CompositeGraphicsLayer CoClass и BasicGraphicsLayer Property for IMap Interface в ArcObjects Developer Help. Особенно этот момент:

...Not only does the CompositeGraphicsLayer object have a collection of graphics layers, but it is itself a graphics layer - like the FDOGraphicsLayer object, it inherits from the GraphicsLayer object.  This means that the CompositeGraphicsLayer object has its own graphics container where graphic elements can be stored.  The graphics layer it provides is called the 'Basic Graphics Layer'.  This Basic Graphics Layer is the default graphics layer and it cannot be deleted...

 

0 голосов
ответил 16 Ноя, 05 от Mitrich (13,680 баллов)
Спасибо.
Это я читал и понял, но при ссылке на  Basic Graphics Layer в контейнер попадают все графические объекты,именно потому, что он содержит и другие слои. может что не так делаю?. 
0 голосов
ответил 16 Ноя, 05 от Alexander1 (32,520 баллов)

В хелпе говорится, что кроме того, что Basic Graphics Layer является контейнером для всех Graphics Layers, он и САМ является Basic Graphics Layer, ТЕМ САМЫМ, который <Default>. Если тебе надо перебрать элементы в графическом слое, пиши нечто подобное:

Private Sub UIButtonControl1_Click()
Dim pMxDoc As IMxDocument
Dim pLayer As ILayer
Dim pDefaultContainer As IGraphicsContainer
Dim pContainer As IGraphicsContainer
Dim pBasicGraphicsLayer As ICompositeGraphicsLayer
Dim pGraphicsContainer As IGraphicsContainer
Dim pCompositeLayer As ICompositeLayer
Dim pElement As IElement
Dim pLyerCount As Long
'
Set pMxDoc = Application.Document
Set pBasicGraphicsLayer = pMxDoc.FocusMap.BasicGraphicsLayer
Set pLayer = pBasicGraphicsLayer
Set pCompositeLayer = pBasicGraphicsLayer
'
' Get the "Default" Annotation group
Set pDefaultContainer = pBasicGraphicsLayer

'Loop through all elements in Default Annotation group
ShowElementsGeometryType pDefaultContainer, pLayer.Name
'
' Loop through all another Annotation groups
For pLyerCount = 0 To pCompositeLayer.Count - 1
    Set pLayer = pCompositeLayer.Layer(pLyerCount)
    Set pContainer = pLayer

'Loop through all elements in Annotation group

    ShowElementsGeometryType pContainer, pLayer.Name
Next
End Sub

Private Sub ShowElementsGeometryType(Container As IGraphicsContainer, LayeName As String)
 Dim pElement As IElement
'
Container.Reset
Set pElement = Container.Next
Do Until pElement Is Nothing
    MsgBox LayeName & ": " & pElement.Geometry.GeometryType
Set pElement = Container.Next
Loop

End Sub

0 голосов
ответил 17 Ноя, 05 от Mitrich (13,680 баллов)
Спасибо большое, разобрался!
0 голосов
ответил 17 Ноя, 05 от Alexander1 (32,520 баллов)
Удачи!
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...