Возвращает/устанавливает текущее имя тематического файла отрисовки слоя.
Visual Basic:
Property ThemeName As String
Для получения имени текущей раскраски свойство является устаревшим, так как в данной версии системы к слою могут быть подключены несколько тем одновременно.
Для проверки подключения нескольких тем следует применять метод Themes.GetEnabled.
При задании имени тематического файла, все текущие раскраски будут отключены, и включится одна тема с указанным именем.
Подключаемый тематический файл может быть создан и заполнен через объект Theme.
Для подключения нескольких тем следует применять метод Themes.SetEnabled.
Именем раскраски служит полный путь к ее файлу - у раскраски, созданной методом CreateTheme, это файл рядом со слоем с расширением вида .c00. Такое имя дает свойство Themes.ThemeName по номеру раскраски.
Присваивание работает: имя включает нужную раскраску (Themes.GetEnabled становится True, а ThemeId показывает ее ID), а пустая строка выключает все раскраски слоя.
А вот чтение не работает: свойство возвращает пустую строку и когда раскрасок нет, и когда раскраска включена. Имя текущей раскраски надежнее брать из коллекции Themes, сверяясь с GetEnabled.
В случае неудачи возникает исключение с одним из следующих кодов:
Код
Описание
513
Слой не открыт. Операция проводится со слоем, который либо не загружен в карту, либо не открыт с помощью метода Open.
Пример создает раскраску, включает ее по имени файла и выключает пустой строкой.
Visual Basic:
Sub Layer_ThemeName 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active If L.ThemeFilters.Count = 0 Then MsgBox "У слоя нет тематических фильтров" Exit Sub End If 'Создаем раскраску по первому фильтру слоя Id = L.CreateTheme(L.ThemeFilters.GetIdByIndex(0), -1, "Проба раскраски") Name = L.Themes.ThemeName(L.Themes.GetIndexById(Id)) S = "Имя раскраски: " & Name S = S & vbCrLf & "включена: " & L.Themes.GetEnabled(Id) 'Включаем её по имени L.ThemeName = Name S = S & vbCrLf & "после присвоения имени: " & L.Themes.GetEnabled(Id) S = S & vbCrLf & "само свойство читается как: '" & L.ThemeName & "'" 'Выключаем все раскраски L.ThemeName = "" S = S & vbCrLf & "после пустой строки: " & L.Themes.GetEnabled(Id) MsgBox S End SubPython:
import zulu def Macro_Layer_ThemeName(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active if L.ThemeFilters.Count == 0: print("У слоя нет тематических фильтров") return # Создаем раскраску по первому фильтру слоя ident = L.CreateTheme(L.ThemeFilters.GetIdByIndex(0), -1, "Проба раскраски") name = L.Themes.ThemeName(L.Themes.GetIndexById(ident)) print("Имя раскраски:", name) print("включена:", L.Themes.GetEnabled(ident)) # Включаем её по имени L.ThemeName = name print("после присвоения имени:", L.Themes.GetEnabled(ident)) print("само свойство читается как:", repr(L.ThemeName)) # Выключаем все раскраски L.ThemeName = "" print("после пустой строки:", L.Themes.GetEnabled(ident))