IntersectByContour method (Layer)

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

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

Layer

Синтаксис:

Visual Basic:

Function IntersectByContour(Contour As Contour, Crit As eCrossCriteria, Reserved As Long) As ElementKeys

Contour - контур для пересечения с объектами слоя.

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

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

Описание:

Критерии разбирают объекты слоя относительно контура: 1 отбирает лежащие внутри целиком, 2 - задетые частично, 4 - и те и другие; 8 - оставшиеся целиком снаружи, 16 - все, что хоть чем-то снаружи. Значение 1024 дает тот же набор, что и 4, а 32, 64, 128 и 256 - пустой набор.

Тот же разбор для нескольких контуров сразу дает метод IntersectByPolyContour, а для круговой области - IntersectByRadius.

Пример:

Visual Basic:

Sub Layer_IntersectByContour
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
Set R = L.GetBoundsRectangle
'Контур на левую нижнюю четверть слоя
Set C = CreateObject("ZuluLib.Contour")
C.AddPoint R.Xmin, R.Ymin
C.AddPoint (R.Xmin + R.Xmax) / 2, R.Ymin
C.AddPoint (R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2
C.AddPoint R.Xmin, (R.Ymin + R.Ymax) / 2
S = "Всего объектов: " & L.ElementKeys.Count
S = S & vbCrLf & "целиком внутри: " & L.IntersectByContour(C, 1, 0).Count
S = S & vbCrLf & "задеты частично: " & L.IntersectByContour(C, 2, 0).Count
S = S & vbCrLf & "целиком снаружи: " & L.IntersectByContour(C, 8, 0).Count
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_IntersectByContour():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    R = L.GetBoundsRectangle()
    # Контур на левую нижнюю четверть слоя
    c = zulu.Contour()
    c.AddPoint(R.Xmin, R.Ymin)
    c.AddPoint((R.Xmin + R.Xmax) / 2, R.Ymin)
    c.AddPoint((R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2)
    c.AddPoint(R.Xmin, (R.Ymin + R.Ymax) / 2)
    print("Всего объектов:", L.ElementKeys.Count)
    print("целиком внутри:", L.IntersectByContour(c, 1, 0).Count)
    print("задеты частично:", L.IntersectByContour(c, 2, 0).Count)
    print("целиком снаружи:", L.IntersectByContour(c, 8, 0).Count)