GetElementsByPoint method (Layer)

Возвращает коллекцию объектов, содержащих в числе своих вершин указанную точку.

Применяется к:

Layer

Синтаксис:

Visual Basic:

Function GetElementsByPoint(ElemID As Long, X As Double, Y As Double) As Elements

ElemID - зарезервирован, должен быть -1.

X,Y - координаты точки, для которой в слое ищутся соответствия.

Описание:

Точка должна совпадать с вершиной объекта точно: если она отстоит от вершины хотя бы на единицу координат слоя, объект в коллекцию не попадает. Если таких объектов нет, возвращается пустая коллекция.

Объекты в коллекции доступны по порядковому номеру от 1 до Count; ключ объекта даёт свойство Key. В точке узла сети в коллекцию попадают и сам узел, и все сходящиеся в нём участки, а во внутренней точке перелома линии — только эта линия.

В случае неудачи возникает исключение с одним из следующих кодов:

Код

Описание

513

Слой не открыт. Операция проводится со слоем, который либо не загружен в карту, либо не открыт с помощью метода Open.

Пример:

Visual Basic:

Sub Layer_GetElementsByPoint
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
'Берем точку первого типового символа слоя
Set En = L.EnumElements
En.MoveFirst
Do While Not En.IsEOF
  If En.GraphType = 2 Then Exit Do
  En.MoveNext
Loop
If En.IsEOF Then
  MsgBox "В слое нет типовых символов"
  Exit Sub
End If
Set Pt = En.GetXY
'Объекты, у которых эта точка есть среди вершин
Set Els = L.GetElementsByPoint(-1, Pt.X, Pt.Y)
S = "В точке символа " & En.ElemID & " сходятся объекты: " & Els.Count
For i = 1 To Els.Count
  S = S & vbCrLf & "ключ " & Els.Item(i).Key & ", тип " & Els.Item(i).TypeID
Next
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_GetElementsByPoint():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    # Берем точку первого типового символа слоя
    En = L.EnumElements()
    En.MoveFirst()
    while not En.IsEOF() and En.GraphType != 2:
        En.MoveNext()
    if En.IsEOF():
        print("В слое нет типовых символов")
        return
    Pt = En.GetXY()
    # Объекты, у которых эта точка есть среди вершин
    Els = L.GetElementsByPoint(-1, Pt.X, Pt.Y)
    print("В точке символа", En.ElemID, "сходятся объекты:", Els.Count)
    for i in range(1, Els.Count + 1):
        el = Els.Item(i)
        print("ключ", el.Key, ", тип", el.TypeId)