AddByPolyContour method (Selection)

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

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

Selection

Синтаксис:

Visual Basic:

Sub AddByPolyContour(PolyC As PolyContour, Crit As eCrossCriteria)

PolyC - составной контур в координатах слоя.

Crit - критерий взаимного расположения объекта и контура.

Описание:

Метод работает так же, как AddByContour, и принимает те же значения Crit, но область задается составным контуром: контур, лежащий внутри другого, становится вырезом, и объекты в вырезе считаются лежащими вне области. Найденные объекты добавляются к тем, что уже есть в группе. Объект Contour метод не принимает (ошибка «Type mismatch», в Python - TypeError).

Пример:

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

Visual Basic:

Sub Selection_AddByPolyContour
Const eFullyInside = 1
'Берем активный слой карты, его группу и габариты
Set L = Zulu.ActiveMapDoc.Layers.Active
Set S = L.Selection
Set R = L.GetBoundsRectangle
DX = (R.Xmax - R.Xmin) / 4
DY = (R.Ymax - R.Ymin) / 4
'Внешний контур - габариты слоя
Set C1 = CreateObject("ZuluLib.Contour")
C1.AddPoint R.Xmin, R.Ymin
C1.AddPoint R.Xmax, R.Ymin
C1.AddPoint R.Xmax, R.Ymax
C1.AddPoint R.Xmin, R.Ymax
'Вырез - центральная часть
Set C2 = CreateObject("ZuluLib.Contour")
C2.AddPoint R.Xmin + DX, R.Ymin + DY
C2.AddPoint R.Xmax - DX, R.Ymin + DY
C2.AddPoint R.Xmax - DX, R.Ymax - DY
C2.AddPoint R.Xmin + DX, R.Ymax - DY
Set PC = CreateObject("ZuluLib.PolyContour")
PC.AddContour C1
PC.AddContour C2
S.Clear
S.AddByPolyContour PC, eFullyInside
MsgBox "Объектов вне центральной части: " & S.ElementKeys.Count & " из " & L.ElementKeys.Count
S.Clear
End Sub

Python:

import zulu

eFullyInside = 1

def Macro_Selection_AddByPolyContour():
    # Берем активный слой карты, его группу и габариты
    L = zulu.App.ActiveMapDoc.Layers.Active
    S = L.Selection
    R = L.GetBoundsRectangle()
    dx = (R.Xmax - R.Xmin) / 4
    dy = (R.Ymax - R.Ymin) / 4
    # Внешний контур - габариты слоя
    C1 = zulu.Contour()
    for px, py in ((R.Xmin, R.Ymin), (R.Xmax, R.Ymin), (R.Xmax, R.Ymax), (R.Xmin, R.Ymax)):
        C1.AddPoint(px, py)
    # Вырез - центральная часть
    C2 = zulu.Contour()
    for px, py in ((R.Xmin + dx, R.Ymin + dy), (R.Xmax - dx, R.Ymin + dy), (R.Xmax - dx, R.Ymax - dy), (R.Xmin + dx, R.Ymax - dy)):
        C2.AddPoint(px, py)
    PC = zulu.PolyContour()
    PC.AddContour(C1)
    PC.AddContour(C2)
    S.Clear()
    S.AddByPolyContour(PC, eFullyInside)
    print("Объектов вне центральной части:", S.ElementKeys.Count, "из", L.ElementKeys.Count)
    S.Clear()