IntersectByRadius method (Layer)

Возвращает коллекцию ElementKeys ключей объектов слоя, удовлетворивших заданным критериям пересечения с круговой областью.

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

Layer

Синтаксис:

Visual Basic:

Function IntersectByRadius(X As Double, Y As Double, R As Double, Crit As eCrossCriteria, Reserved As Long) As ElementKeys

X, Y - координаты центра круга

R - радиус круга

Crit - критерий пересечения может принимать значения из набора eCrossCriteria

Reserved - значение зарезервировано, должно быть нулём.

Описание:

Радиус задается в координатах слоя, а критерии те же, что у метода IntersectByContour: 1 - объекты внутри круга целиком, 2 - задетые частично, 4 - и те и другие, 8 - оставшиеся целиком снаружи.

Пример:

Visual Basic:

Sub Layer_IntersectByRadius
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
Set R = L.GetBoundsRectangle
'Круг в середине слоя радиусом в четверть его ширины
X = (R.Xmin + R.Xmax) / 2
Y = (R.Ymin + R.Ymax) / 2
Rad = (R.Xmax - R.Xmin) / 4
S = "Круг в " & Round(X, 1) & ", " & Round(Y, 1) & " радиусом " & Round(Rad, 1)
S = S & vbCrLf & "целиком внутри: " & L.IntersectByRadius(X, Y, Rad, 1, 0).Count
S = S & vbCrLf & "задеты частично: " & L.IntersectByRadius(X, Y, Rad, 2, 0).Count
S = S & vbCrLf & "целиком снаружи: " & L.IntersectByRadius(X, Y, Rad, 8, 0).Count
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_IntersectByRadius():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    R = L.GetBoundsRectangle()
    # Круг в середине слоя радиусом в четверть его ширины
    x = (R.Xmin + R.Xmax) / 2
    y = (R.Ymin + R.Ymax) / 2
    rad = (R.Xmax - R.Xmin) / 4
    print("Круг в", round(x, 1), round(y, 1), "радиусом", round(rad, 1))
    print("целиком внутри:", L.IntersectByRadius(x, y, rad, 1, 0).Count)
    print("задеты частично:", L.IntersectByRadius(x, y, rad, 2, 0).Count)
    print("целиком снаружи:", L.IntersectByRadius(x, y, rad, 8, 0).Count)