ThemeName property (Layer)

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

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

Layer

Синтаксис:

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 Sub

Python:

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))