CreateLabels method (Layer)

Создает вариант надписей слоя по шаблону.

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

Layer

Синтаксис:

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 Sub

Python:

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("Вариант бирок не создан")