GetClosestElementByXYEx method (Layer)

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

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

Layer

Синтаксис:

Visual Basic:

Function GetClosestElementByXYEx(X As Double, Y As Double, R As Double, Flags As Long, retPoint As ZPoint) As Long

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

R - радиус поиска.

Flags - флаги поиска, значения складываются:

1 - искать только среди выделенных объектов слоя;

2 - отдавать предпочтение символам: если в радиусе поиска есть символ, возвращается ближайший символ, даже если другой объект расположен ближе.

retPoint - объект ZPoint, в который записывается точка найденного объекта, ближайшая к заданной.

Описание:

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

Для линии в retPoint записывается ближайшая к заданной точка линии, для символа, найденного с флагом 2, — координаты символа.

С флагами 0 и 1 метод находит тот же объект, что и GetClosestElementByXY с параметром SelectedOnly, равным False и True соответственно.

Пример:

Visual Basic:

Sub Layer_GetClosestElementByXYEx
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
Set R = L.GetBoundsRectangle
'Ищем около центра слоя в радиусе десятой части его ширины
X = (R.Xmin + R.Xmax) / 2
Y = (R.Ymin + R.Ymax) / 2
Radius = (R.Xmax - R.Xmin) / 10
Set P = CreateObject("ZuluLib.ZPoint")
ID = L.GetClosestElementByXYEx(X, Y, Radius, 0, P)
S = "Ближайший объект: " & ID & " (" & P.X & ", " & P.Y & ")" & vbCrLf
'С флагом 2 предпочтение отдается символам
ID = L.GetClosestElementByXYEx(X, Y, Radius, 2, P)
S = S & "Ближайший символ: " & ID & " (" & P.X & ", " & P.Y & ")"
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_GetClosestElementByXYEx():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    R = L.GetBoundsRectangle()
    # Ищем около центра слоя в радиусе десятой части его ширины
    X = (R.Xmin + R.Xmax) / 2
    Y = (R.Ymin + R.Ymax) / 2
    radius = (R.Xmax - R.Xmin) / 10
    P = zulu.ZPoint()
    ID = L.GetClosestElementByXYEx(X, Y, radius, 0, P)
    print("Ближайший объект:", ID, "(", P.X, ",", P.Y, ")")
    # С флагом 2 предпочтение отдается символам
    ID = L.GetClosestElementByXYEx(X, Y, radius, 2, P)
    print("Ближайший символ:", ID, "(", P.X, ",", P.Y, ")")