CutSelectedElementsFromTarget method (Layer)

Вырезает элементы, входящие в группу слоя из элементов, входящих в мишень этого же слоя.

Вызов этого метода аналогичен выполнению команды системы Zulu Правка\Вырезать из мишени группу для случая, когда редактируемый и активный слой совпадают.

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

Layer

Синтаксис:

Visual Basic:

Sub CutSelectedElementsFromTarget

Описание:

Группа слоя — это выделенные объекты, свойство Selection; мишень — свойство TargetSelection. Из объекта мишени вырезается то, что перекрыто объектами группы: у площадного объекта мишени на месте перекрытия появляется вырез, а его площадь уменьшается на площадь перекрытия. Сами объекты группы остаются в слое без изменений.

После вызова группа очищается, а мишень сохраняется.

Пример:

Visual Basic:

Sub Layer_CutSelectedElementsFromTarget
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
Set R = L.GetBoundsRectangle
D = (R.Xmax - R.Xmin) / 10
X = R.Xmax + D
Y = R.Ymin
Set St = CreateObject("ZuluLib.ElemStyle")
St.FillStyle = 2
St.PatColor = RGB(255, 0, 0)
'Большой квадрат - он станет мишенью
Set C1 = CreateObject("ZuluLib.Contour")
C1.AddPoint X, Y
C1.AddPoint X + D, Y
C1.AddPoint X + D, Y + D
C1.AddPoint X, Y + D
Big = L.AddContour(C1, St, -1, -1)
'Малый квадрат внутри него - он станет группой
Set C2 = CreateObject("ZuluLib.Contour")
C2.AddPoint X + D / 4, Y + D / 4
C2.AddPoint X + D / 2, Y + D / 4
C2.AddPoint X + D / 2, Y + D / 2
C2.AddPoint X + D / 4, Y + D / 2
Small = L.AddContour(C2, St, -1, -1)
'Мишень - большой квадрат, группа - малый
L.TargetSelection.Clear
L.TargetSelection.AddElem Big
L.Selection.Clear
L.Selection.AddElem Small
'Вырезаем группу из мишени
L.CutSelectedElementsFromTarget
'Смотрим, что стало с мишенью
Set En = L.EnumElements
En.MoveFirst
Do While Not En.IsEOF
  If En.ElemID = Big Then Exit Do
  En.MoveNext
Loop
MsgBox "Мишень " & Big & ": площадь " & Round(En.Area, 1) & ", вершин " & En.GetPoints.Count
End Sub

Python:

import zulu

def Macro_Layer_CutSelectedElementsFromTarget():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    R = L.GetBoundsRectangle()
    d = (R.Xmax - R.Xmin) / 10
    x = R.Xmax + d
    y = R.Ymin
    St = zulu.ElemStyle()
    St.FillStyle = 2
    St.PatColor = 255
    # Большой квадрат - он станет мишенью
    C1 = zulu.Contour()
    for px, py in ((x, y), (x + d, y), (x + d, y + d), (x, y + d)):
        C1.AddPoint(px, py)
    big = L.AddContour(C1, St, -1, -1)
    # Малый квадрат внутри него - он станет группой
    C2 = zulu.Contour()
    for px, py in ((x + d / 4, y + d / 4), (x + d / 2, y + d / 4),
                   (x + d / 2, y + d / 2), (x + d / 4, y + d / 2)):
        C2.AddPoint(px, py)
    small = L.AddContour(C2, St, -1, -1)
    # Мишень - большой квадрат, группа - малый
    L.TargetSelection.Clear()
    L.TargetSelection.AddElem(big)
    L.Selection.Clear()
    L.Selection.AddElem(small)
    # Вырезаем группу из мишени
    L.CutSelectedElementsFromTarget()
    # Смотрим, что стало с мишенью
    En = L.EnumElements()
    En.MoveFirst()
    while not En.IsEOF() and En.ElemID != big:
        En.MoveNext()
    print("Мишень", big, ": площадь", round(En.Area, 1), ", вершин", En.GetPoints().Count)