GetClosestElementByXY method (Layer)

Осуществляет поиск ближайшего к заданной точке объекта слоя.

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

Layer

Синтаксис:

Visual Basic:

Function GetClosestElementByXY(X As Double, Y As Double, R As Double, SelectedOnly As Boolean, retPoint As ZPoint) As Long

X,Y - координаты точки.

R - радиус поиска в единицах координат слоя.

SelectedOnly - поиск только для выделенных объектов.

retPoint - объект, содержащий точку найденного объекта, ближайшую к заданной.

Описание:

Метод возвращает ID найденного объекта слоя или -1, если объект не найден; в этом случае retPoint не изменяется.

Объект находится, если расстояние до него не больше R; отрицательное значение R действует так же, как положительное. Для линии в retPoint записывается ближайшая к заданной точка линии, в том числе её конец, для символа — координаты символа.

При SelectedOnly = True поиск идёт только среди объектов группы слоя (Selection); если группа пуста, метод возвращает -1.

Пример:

Visual Basic:

Sub Layer_GetClosestElementByXY
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
'Точка - центр габаритов слоя, радиус - десятая часть его ширины
Set R = L.GetBoundsRectangle
X = (R.Xmin + R.Xmax) / 2
Y = (R.Ymin + R.Ymax) / 2
Set Pt = CreateObject("ZuluLib.ZPoint")
ElemID = L.GetClosestElementByXY(X, Y, (R.Xmax - R.Xmin) / 10, False, Pt)
If ElemID = -1 Then
  MsgBox "В радиусе поиска объектов нет"
Else
  MsgBox "Ближайший объект " & ElemID & vbCrLf & "Ближайшая его точка: " & Pt.X & ", " & Pt.Y
End If
End Sub

Python:

import zulu

def Macro_Layer_GetClosestElementByXY():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    # Точка - центр габаритов слоя, радиус - десятая часть его ширины
    R = L.GetBoundsRectangle()
    x = (R.Xmin + R.Xmax) / 2
    y = (R.Ymin + R.Ymax) / 2
    Pt = zulu.ZPoint()
    elem_id = L.GetClosestElementByXY(x, y, (R.Xmax - R.Xmin) / 10, False, Pt)
    if elem_id == -1:
        print("В радиусе поиска объектов нет")
    else:
        print("Ближайший объект", elem_id)
        print("Ближайшая его точка:", Pt.X, ",", Pt.Y)