Шаблоны приложений (Application Templates)#

Использование#

Шаблоны приложений – это функция, которая позволяет вам определить конфигурацию многократного использования, которую можно выбрать для замены конфигурации по умолчанию, без необходимости отдельной установки Blender или перезаписи ваших личных настроек.

Шаблоны приложений можно выбрать на заставке (splash screen) или в подменю Файл ‣ Создать. Если шаблоны не найдены, меню не будет отображаться на заставке.

Новые шаблоны приложений можно установить из Меню Blender. Если вы хотите, чтобы текущий шаблон приложения оставался активным при перезапуске Blender, сохраните свои настройки.

Мотивация#

В некоторых случаях недостаточно написать один скрипт или аддон и ожидать, что кто-то заменит их настройки и файл запуска, установит скрипты и изменит их раскладку клавиатуры.

Цель шаблонов приложений – поддержать переключение на индивидуальную конфигурацию без нарушения существующих настроек и установки. Это означает, что люди могут создавать свои собственные приложения на базе Blender, которые можно легко распространять.

Детали#

Шаблон приложения может определять свои собственные:

Файл запуска

Файл по умолчанию для загрузки с этим шаблоном.

Настройки

Используются только определённые настройки из шаблона:

  • Темы.

  • Аддоны.

  • Раскладки клавиатуры.

  • Освещение вьюпорта.

Начальная заставка (Splash Screen)

Шаблоны могут содержать собственное изображение заставки.

Скрипты Python

Хотя шаблоны имеют доступ к тем же функциям, что и любые другие скрипты, классические операции включают в себя:

  • Модификация и замена деталей пользовательского интерфейса.

  • Определение новых меню, раскладок клавиш и инструментов.

  • Определение пользовательского пути аддона для определённых дополнений (add-ons) шаблона.

Шаблоны также имеют собственную пользовательскую конфигурацию, поэтому сохранение файла запуска при использовании шаблона не перезаписывает файл запуска по умолчанию.

Макет каталога#

Шаблоны могут находиться в одном из двух мест в каталоге scripts.

Расположение шаблонов:
{BLENDER_USER_SCRIPTS}/startup/bl_app_templates_user
{BLENDER_SYSTEM_SCRIPTS}/startup/bl_app_templates_system

Конфигурация пользователя хранится в подкаталоге:

Без шаблона:
./config/startup.blend
./config/userpref.blend
С шаблоном:
./config/{APP_TEMPLATE_ID}/startup.blend
./config/{APP_TEMPLATE_ID}/userpref.blend

См. Макет каталога Blender для получения подробной информации о расположении скриптов и конфигурации.

Подсказка

Пути устранения неполадок (Troubleshooting Paths)

При создании шаблона приложения вы можете столкнуться с проблемами, из-за которых не удаётся найти пути. Чтобы разобраться в этом, вы можете регистрировать (log output) вывод всех запросов (path look-ups) Blender.

Пример аргументов командной строки, которые загружают Blender с пользовательским шаблоном приложения (замените my_app_template на имя вашего собственного шаблона):

blender --log "bke.appdir.*" --log-level -1 --app-template my_app_template

Затем вы можете проверить пути, по которым предпринимаются попытки доступа к my_app_template.

Доступ к командной строке#

Используя аргументы командной строки, вы можете настроить программу запуска (launcher), которая открывает Blender с определённым шаблоном приложения:

blender --app-template my_template

Содержимое шаблона#

Каждый из следующих файлов можно использовать для шаблонов приложений, но это необязательно.

startup.blend

Заводской файл запуска, который будет использоваться в этом шаблоне.

userpref.blend

Файл заводских настроек, который будет использоваться для этого шаблона. Когда пропущенные настройки используются совместно с конфигурацией Blender «по умолчанию».

(Как отмечалось ранее, это используется только для подгруппы настроек).

splash.png

Экран-заставка для переопределения стандартного оформления Blender (не включая текст заголовка). Обратите внимание: это изображение должно быть размером 1000x500.

__init__.py

Скрипт Python, который должен содержать функции register и unregister.

Примечание

Связанные blend-файлы startup.blend и userpref.blend считаются заводскими настройками и никогда не перезаписываются.

Пользователь может сохранить свои собственные настройки запуска/предпочтений (настроек) при использовании этого шаблона, которые будут сохранены в его пользовательской конфигурации, но только в том случае, если шаблон включает свой собственный файл userpref.blend.

Исходные настройки шаблона можно загрузить с помощью: Загрузить заводские настройки шаблона (Load Template Factory Settings) из меню «Файл» практически так же, как работает Загрузить заводские настройки (Load Factory Settings).

Скрипты шаблонов#

Хотя шаблоны приложений могут использовать скрипты Python, они просто имеют доступ к тем же API (программный интерфейс приложения), которые доступны для аддонов и любых других скриптов.

Как отмечалось выше, в шаблоне приложения вы можете дополнительно использовать __init__.py. Это имеет следующие преимущества:

  • Изменения можно вносить в автозагрузку или настройки без необходимости распространения blend-файла.

  • Изменения могут вноситься динамически.

    Например, вы можете настроить шаблон для проверки количества процессоров, операционной системы и памяти, а затем установить значения на основе этого.

  • Вы можете включить аддоны, связанные с вашим шаблоном.

При активации вызывается функция register, unregister вызывается, когда выбирается другой шаблон.

Поскольку они запускаются только один раз, любые изменения значений по умолчанию необходимо вносить через обработчик (handler). Два обработчика, которые вы, вероятно, будете использовать:

  • bpy.app.handlers.load_factory_preferences_post

  • bpy.app.handlers.load_factory_startup_post

Они позволяют вам определить свои собственные «заводские настройки», которые пользователь может изменить, так же, как Blender имеет свои собственные настройки по умолчанию при первом запуске.

Это пример файла __init__.py, который определяет настройки по умолчанию для использования шаблона приложения.

import bpy
from bpy.app.handlers import persistent

@persistent
def load_handler_for_preferences(_):
    print("Changing Preference Defaults!")
    from bpy import context

    prefs = context.preferences
    prefs.use_preferences_save = False

    kc = context.window_manager.keyconfigs["blender"]
    kc_prefs = kc.preferences
    if kc_prefs is not None:
        kc_prefs.select_mouse = 'RIGHT'
        kc_prefs.spacebar_action = 'SEARCH'
        kc_prefs.use_pie_click_drag = True

    view = prefs.view
    view.header_align = 'BOTTOM'


@persistent
def load_handler_for_startup(_):
    print("Changing Startup Defaults!")

    # Use smooth faces.
    for mesh in bpy.data.meshes:
        for poly in mesh.polygons:
            poly.use_smooth = True

    # Use material preview shading.
    for screen in bpy.data.screens:
        for area in screen.areas:
            for space in area.spaces:
                if space.type == 'VIEW_3D':
                    space.shading.type = 'MATERIAL'
                    space.shading.use_scene_lights = True


def register():
    print("Registering to Change Defaults")
    bpy.app.handlers.load_factory_preferences_post.append(load_handler_for_preferences)
    bpy.app.handlers.load_factory_startup_post.append(load_handler_for_startup)

def unregister():
    print("Unregistering to Change Defaults")
    bpy.app.handlers.load_factory_preferences_post.remove(load_handler_for_preferences)
    bpy.app.handlers.load_factory_startup_post.remove(load_handler_for_startup)