Создает вариант надписей слоя по шаблону.
Visual Basic:
Function CreateLabels(LableTemplateName As String, LabelLayerUserName As String, TypeID As Long, LabelID As Long, align As eLabelPosition, AlongLines As Boolean,
Overwrite As Boolean, ShortLines As Boolean, Angle As Double, Scale As Double, Auto As Boolean, shiftX As Double, shiftY As Double) As Boolean
LableTemplateName - полное имя файла шаблона надписи (*.zlb).
LabelLayerUserName - название создаваемого варианта бирок.
TypeID - для какого типа создаются бирки (-1 для примитивов).
LabelID - ID файла (-1 по умолчанию создаст сам).
align - ориентация бирок относительно точки привязки к объекту.
AlongLines - флаг выводить вдоль линий.
Overwrite - переписывать существующие (если уже есть) положения бирок.
ShortLines - строить бирки для коротких линий (в которые надпись не помещается).
Angle - угол поворота бирок.
Scale - масштаб 1:1 (0 - без масштаба).
Auto - позиционировать бирку по линии в зависимости от видимой части линии.
shiftX, shiftY - сдвиг в пикселях по x и y.
Метод возвращает True, если операция прошла успешно, в противном случае метод возвращает False.
Шаблон надписи — отдельный файл с расширением zlb; в LableTemplateName передаётся его полное имя вместе с путём. Если файла шаблона нет, метод возвращает False и вариант не создаётся.
Бирки строятся для всех объектов указанного типа. Созданный вариант попадает в коллекцию LabelLayers, получает название LabelLayerUserName и хранится вместе со слоем. При LabelID равном -1 варианту назначается следующий свободный ID.
Названия вариантов не обязаны различаться: повторный вызов с тем же названием создаёт ещё один вариант.
Visual Basic:
Sub Layer_CreateLabels 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active 'Шаблон надписи берем из папки слоя Set FSO = CreateObject("Scripting.FileSystemObject") Tpl = FSO.GetParentFolderName(L.Name) & "\potrebitel.zlb" If Not FSO.FileExists(Tpl) Then MsgBox "Нет файла шаблона " & Tpl Exit Sub End If 'Тип берем у первого символа слоя, ID варианта назначаем сами Set En = L.EnumElements En.MoveFirst Do While Not En.IsEOF If En.GraphType = 2 Then Exit Do En.MoveNext Loop NewID = L.LabelLayers.GetIdByIndex(L.LabelLayers.Count - 1) + 1 If L.CreateLabels(Tpl, "Бирки по шаблону", En.TypeID, NewID, 0, False, True, True, 0, 0, False, 0, 0) Then Set LL = L.LabelLayers.ItemById(NewID) MsgBox "Создан вариант бирок " & NewID & " «" & LL.UserName & "» для типа " & LL.TypeID Else MsgBox "Вариант бирок не создан" End If End SubPython:
import zulu, os def Macro_Layer_CreateLabels(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active # Шаблон надписи берем из папки слоя tpl = os.path.join(os.path.dirname(L.Name), "potrebitel.zlb") if not os.path.exists(tpl): print("Нет файла шаблона", tpl) return # Тип берем у первого символа слоя, ID варианта назначаем сами En = L.EnumElements() En.MoveFirst() while not En.IsEOF() and En.GraphType != 2: En.MoveNext() new_id = L.LabelLayers.GetIdByIndex(L.LabelLayers.Count - 1) + 1 if L.CreateLabels(tpl, "Бирки по шаблону", En.TypeID, new_id, 0, False, True, True, 0, 0, False, 0, 0): LL = L.LabelLayers.ItemById(new_id) print("Создан вариант бирок", new_id, LL.UserName, "для типа", LL.TypeId) else: print("Вариант бирок не создан")