Возвращает\устанавливает значение ID текущей тематической раскраски слоя.
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 SubPython:
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)