Осуществляет поиск ближайшего к заданной точке объекта слоя.
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 SubPython:
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)