CreateTheme method (Layer)

Создает тематическую раскраску слоя по указанному тематическому фильтру.

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

Layer

Синтаксис:

Visual Basic:

Function CreateTheme(FilterID As Long, ThemeId As Long, ThemeDisplayName As String) As Long

FilterID - идентификатор тематического фильтра

ThemeId - идентификатор создаваемой раскраски (-1 для новой).

ThemeDisplayName - пользовательское название варианта раскраски.

Описание:

Если в качестве идентификатора темы задан идентификатор уже существующего варианта раскраски, он будет заменен на новую раскраску под тем же идентификатором.

Метод возвращает ID созданной раскраски, если операция прошла успешно, в противном случае метод возвращает -1.

Фильтры слоя перечисляет свойство ThemeFilters, а сами раскраски — свойство Themes. Для несуществующего фильтра метод возвращает -1 и раскраску не создаёт.

Созданная раскраска хранится вместе со слоем: её видит и другой объект Layer, открытый для того же слоя. Название из ThemeDisplayName становится её пользовательским названием.

Раскраска создаётся выключенной, поэтому вид карты после вызова не меняется. Объекты слоя перекрашиваются, когда раскраску включают методом SetEnabled.

Пример:

Visual Basic:

Sub Layer_CreateTheme
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
If L.ThemeFilters.Count = 0 Then
  MsgBox "У слоя нет тематических фильтров"
  Exit Sub
End If
'Создаем раскраску по первому фильтру слоя
FilterID = L.ThemeFilters.GetIdByIndex(0)
ThemeID = L.CreateTheme(FilterID, -1, "Проба раскраски")
If ThemeID = -1 Then
  MsgBox "Раскраска не создана"
Else
  MsgBox "Создана раскраска " & ThemeID & " «" & L.Themes.ThemeUserName(L.Themes.GetIndexById(ThemeID)) & _
         "» по фильтру " & FilterID & vbCrLf & "Всего раскрасок у слоя: " & L.Themes.Count
End If
End Sub

Python:

import zulu

def Macro_Layer_CreateTheme():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    if L.ThemeFilters.Count == 0:
        print("У слоя нет тематических фильтров")
        return
    # Создаем раскраску по первому фильтру слоя
    filter_id = L.ThemeFilters.GetIdByIndex(0)
    theme_id = L.CreateTheme(filter_id, -1, "Проба раскраски")
    if theme_id == -1:
        print("Раскраска не создана")
    else:
        print("Создана раскраска", theme_id,
              L.Themes.ThemeUserName(L.Themes.GetIndexById(theme_id)), "по фильтру", filter_id)
        print("Всего раскрасок у слоя:", L.Themes.Count)