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