CreatePolygonsFromLines method (Layer)

Создает полигоны по группе линейных объектов.

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

Layer

Синтаксис:

Visual Basic:

Function CreatePolygonsFromLines(inLayer As Layer,Style As ElemStyle,Options As long) As Long

inLayer - исходный слой с группой линейных объектов

Style - стиль для создаваемых полигональных объектов

Options - зарезервирован, должен быть нулем

Описание:

Метод ищет замкнутые области в группе линейных объектов исходного слоя, и записывает найденные области в виде полигонов в текущий слой.

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

Полигоны добавляются примитивами со стилем Style. Исходный и текущий слой могут совпадать — тогда полигоны появляются в том же слое, что и линии.

Метод возвращает -1, если в исходном слое ничего не выделено, и 0, если поиск выполнен, — в том числе когда замкнутых областей не нашлось.

Пример:

Visual Basic:

Sub Layer_CreatePolygonsFromLines
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
'Правее слоя рисуем квадрат из четырех отдельных отрезков и выделяем их
Set R = L.GetBoundsRectangle
D = (R.Xmax - R.Xmin) / 10
X = R.Xmax + D
Y = R.Ymin
Pts = Array(X, Y, X + D, Y, X + D, Y + D, X, Y + D, X, Y)
L.Selection.Clear
For i = 0 To 3
  Set PL = CreateObject("ZuluLib.PolyLine")
  PL.AddPoint Pts(2 * i), Pts(2 * i + 1)
  PL.AddPoint Pts(2 * i + 2), Pts(2 * i + 3)
  L.Selection.AddElem L.AddPolyLine(PL, CreateObject("ZuluLib.ElemStyle"), -1, -1)
Next
'Красная заливка стилем 2 из библиотеки слоя
Set St = CreateObject("ZuluLib.ElemStyle")
St.FillStyle = 2
St.PatColor = RGB(255, 0, 0)
'Строим полигон по выделенным отрезкам в том же слое
MsgBox "Результат: " & L.CreatePolygonsFromLines(L, St, 0)
End Sub

Python:

import zulu

def Macro_Layer_CreatePolygonsFromLines():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    # Правее слоя рисуем квадрат из четырех отдельных отрезков и выделяем их
    R = L.GetBoundsRectangle()
    d = (R.Xmax - R.Xmin) / 10
    x = R.Xmax + d
    y = R.Ymin
    pts = [(x, y), (x + d, y), (x + d, y + d), (x, y + d), (x, y)]
    L.Selection.Clear()
    for i in range(4):
        PL = zulu.PolyLine()
        PL.AddPoint(*pts[i])
        PL.AddPoint(*pts[i + 1])
        L.Selection.AddElem(L.AddPolyLine(PL, zulu.ElemStyle(), -1, -1))
    # Красная заливка стилем 2 из библиотеки слоя
    St = zulu.ElemStyle()
    St.FillStyle = 2
    St.PatColor = 255
    # Строим полигон по выделенным отрезкам в том же слое
    print("Результат:", L.CreatePolygonsFromLines(L, St, 0))