Страница 1 из 1

ArcObjects (идентификация объекта)

Добавлено: 01 окт 2008, 14:00
Шаки
Помогите, пожалуйста!!! Как при помощи VBA и COM библиотек ArcObjects определить к какому слою относится выбранный объект :cry:

Re: ArcObjects (идентификация объекта)

Добавлено: 01 окт 2008, 16:23
Шаки
Всем спасибо, кто хоть обратил внимание, я сама разобралась, Я УМНИЧКА :D

Re: ArcObjects (идентификация объекта)

Добавлено: 02 окт 2008, 00:07
Максим Дубинин
а вы припишите ответ на свой вопрос, это хорошая практика

Re: ArcObjects (идентификация объекта)

Добавлено: 02 окт 2008, 20:40
Шаки

Код: Выделить всё

Private Sub tool_selection_MouseDown(ByVal button As Long, _
              ByVal shift As Long, ByVal x As Long, ByVal y As Long)
  Dim pMxApp As IMxApplication
  Dim pDoc As IMxDocument
  Dim pMap As IMap
  Dim pIdentify As IIdentify
  Dim pPoint As IPoint
  Dim pIDArray As IArray
  Dim pFeatIdObj As IFeatureIdentifyObj
  Dim pIdObj As IIdentifyObj
  Dim pFeature As IFeature
  Dim pField As IField
  Dim i As Integer
   Dim pRowObj As IRowIdentifyObject
  Set pMxApp = Application
  Set pDoc = Application.Document
  Set pMap = pDoc.FocusMap
   ' ищет определяемый (нужный) слой
  For i = 0 To pMap.LayerCount - 1
        If pMap.Layer(i).Name = "breach_features" Then
            Set pIdentify = pMap.Layer(i)
        End If
  Next
  Set pPoint = pMxApp.Display.DisplayTransformation.ToMapPoint(x, y)
  Dim searchdistance As Long
  searchdistance = pDoc.ActiveView.Extent.Width * 0.005
  Dim pSegColl As ISegmentCollection
  Set pSegColl = New Polygon
  pSegColl.SetCircle pPoint, searchdistance
  Dim pGeom As IGeometry
  Set pGeom = pSegColl
  Set pIDArray = pIdentify.Identify(pGeom)
  If Not pIDArray Is Nothing Then
    Set pFeatIdObj = pIDArray.Element(0)
    Set pIdObj = pFeatIdObj
    Set pRowObj = pFeatIdObj
    Set pFeature = pRowObj.Row
    pIdObj.Flash pMxApp.Display
  MsgBox "Слой:" & pIdObj.Layer.Name & vbNewLine & "Feature:" & pIdObj.Name
   Else
    MsgBox " НЕ ТУДА Жмешь!!!!"
  End If
End Sub

Re: ArcObjects (идентификация объекта)

Добавлено: 02 окт 2008, 20:42
Шаки
Ах да, процедура для UIControls

Re: ArcObjects (идентификация объекта)

Добавлено: 04 окт 2008, 10:02
AndreyL
Шаки! Прекрасный код, Спасибо! Для полигонов и линий работает "лучше и не надо". Для точечного слоя не работает – не знаете, как быстренько исправить?

Re: ArcObjects (идентификация объекта)

Добавлено: 04 окт 2008, 14:41
AndreyL
Разобрался! У меня точечный слой в географической системе, а линейные и полигональные в проекции. Чтобы корректно работало, нужно перепроецировать в проекцию pMap.FocusMap.

Re: ArcObjects (идентификация объекта)

Добавлено: 05 окт 2008, 19:45
Шаки
Классно, что кому-то ещё пригодилось!!!! Я ведь только второй месяц с ArcObjects работаю, и программирую на VBA, от того так и горжусь :)