IntersectByPolyContour method (Layer)

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

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

Layer

Синтаксис:

Visual Basic:

Function IntersectByPolyContour(PolyContour As PolyContour, Crit As eCrossCriteria, Reserved As Long) As ElementKeys

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

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

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

Описание:

Критерии те же, что у метода IntersectByContour: поликонтур из одного контура отбирает те же объекты, что и сам этот контур.

Контуры набираются в поликонтур методом AddContour, так что одним вызовом можно отобрать объекты сразу по нескольким областям.

Пример:

Visual Basic:

Sub Layer_IntersectByPolyContour
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
Set R = L.GetBoundsRectangle
'Поликонтур из двух четвертей слоя: левой нижней и правой верхней
Set PC = CreateObject("ZuluLib.PolyContour")
Set C1 = CreateObject("ZuluLib.Contour")
C1.AddPoint R.Xmin, R.Ymin
C1.AddPoint (R.Xmin + R.Xmax) / 2, R.Ymin
C1.AddPoint (R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2
C1.AddPoint R.Xmin, (R.Ymin + R.Ymax) / 2
PC.AddContour C1
Set C2 = CreateObject("ZuluLib.Contour")
C2.AddPoint (R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2
C2.AddPoint R.Xmax, (R.Ymin + R.Ymax) / 2
C2.AddPoint R.Xmax, R.Ymax
C2.AddPoint (R.Xmin + R.Xmax) / 2, R.Ymax
PC.AddContour C2
S = "Контуров в поликонтуре: " & PC.Count
S = S & vbCrLf & "целиком внутри: " & L.IntersectByPolyContour(PC, 1, 0).Count
S = S & vbCrLf & "целиком или частично: " & L.IntersectByPolyContour(PC, 4, 0).Count
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_IntersectByPolyContour():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    R = L.GetBoundsRectangle()
    # Поликонтур из двух четвертей слоя: левой нижней и правой верхней
    pc = zulu.PolyContour()
    c1 = zulu.Contour()
    c1.AddPoint(R.Xmin, R.Ymin)
    c1.AddPoint((R.Xmin + R.Xmax) / 2, R.Ymin)
    c1.AddPoint((R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2)
    c1.AddPoint(R.Xmin, (R.Ymin + R.Ymax) / 2)
    pc.AddContour(c1)
    c2 = zulu.Contour()
    c2.AddPoint((R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2)
    c2.AddPoint(R.Xmax, (R.Ymin + R.Ymax) / 2)
    c2.AddPoint(R.Xmax, R.Ymax)
    c2.AddPoint((R.Xmin + R.Xmax) / 2, R.Ymax)
    pc.AddContour(c2)
    print("Контуров в поликонтуре:", pc.Count)
    print("целиком внутри:", L.IntersectByPolyContour(pc, 1, 0).Count)
    print("целиком или частично:", L.IntersectByPolyContour(pc, 4, 0).Count)