ThemeId property (Layer)

Возвращает\устанавливает значение ID текущей тематической раскраски слоя.

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

Layer

Синтаксис:

Visual Basic:

Property ThemeId As long

Описание:

Для получения текущей раскраски свойство является устаревшим, так как в данной версии системы к слою могут быть подключены несколько тем одновременно.

Для проверки подключения нескольких тем следует применять метод Themes.GetEnabled.

При задании ID раскраски, все текущие темы будут отключены и включится одна тема с указанным ID.

Для подключения нескольких тем следует применять метод Themes.SetEnabled.

У слоя без раскрасок свойство равно -1, и присваивание ID, которого нет, ничего не меняет. После создания раскраски методом CreateTheme свойство сразу показывает ее ID, хотя сама раскраска создается выключенной.

Присваивание ID включает раскраску - Themes.GetEnabled для нее становится True; присваивание -1 выключает все раскраски, и свойство снова дает -1. При этом после Themes.DisableAll свойство продолжает показывать ID последней раскраски, хотя включенных нет, - состояние надежнее спрашивать у Themes.GetEnabled.

Пример:

Пример создает раскраску по первому фильтру слоя, включает ее через ThemeId и выключает. Созданная раскраска остается в слое: убрать ее через объектную модель нечем.

Visual Basic:

Sub Layer_ThemeId
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
S = "Раскрасок у слоя: " & L.Themes.Count & ", ThemeId: " & L.ThemeId
If L.ThemeFilters.Count = 0 Then
  MsgBox S & vbCrLf & "у слоя нет тематических фильтров"
  Exit Sub
End If
'Создаем раскраску по первому фильтру
Id = L.CreateTheme(L.ThemeFilters.GetIdByIndex(0), -1, "Проба раскраски")
S = S & vbCrLf & "создана раскраска " & Id & ", ThemeId: " & L.ThemeId
S = S & vbCrLf & "включена: " & L.Themes.GetEnabled(Id)
'Включаем её и выключаем обратно
L.ThemeId = Id
S = S & vbCrLf & "после ThemeId = " & Id & ": включена " & L.Themes.GetEnabled(Id)
L.ThemeId = -1
S = S & vbCrLf & "после ThemeId = -1: включена " & L.Themes.GetEnabled(Id) & ", ThemeId " & L.ThemeId
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_ThemeId():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    print("Раскрасок у слоя:", L.Themes.Count, ", ThemeId:", L.ThemeId)
    if L.ThemeFilters.Count == 0:
        print("у слоя нет тематических фильтров")
        return
    # Создаем раскраску по первому фильтру
    ident = L.CreateTheme(L.ThemeFilters.GetIdByIndex(0), -1, "Проба раскраски")
    print("создана раскраска", ident, ", ThemeId:", L.ThemeId)
    print("включена:", L.Themes.GetEnabled(ident))
    # Включаем её и выключаем обратно
    L.ThemeId = ident
    print("после ThemeId =", ident, ": включена", L.Themes.GetEnabled(ident))
    L.ThemeId = -1
    print("после ThemeId = -1: включена", L.Themes.GetEnabled(ident), ", ThemeId", L.ThemeId)