Создает полигоны по группе линейных объектов.
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 SubPython:
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))