Хотите добавить поддержку пресетов в свой аддон? Читайте дальше, чтобы узнать как!
В Blender есть встроенная система пресетов, используемая для операторов и панелей. Хорошей новостью является то, что он основан на Python и прост в использовании.
В Blender есть встроенная система пресетов, используемая для операторов и панелей. Хорошей новостью является то, что он основан на Python и прост в использовании.
Хотите добавить поддержку пресетов в свой аддон? Читайте дальше, чтобы узнать как!
Linux ~ / .Config / блендер / 2,79 / скрипты / пресетов /
Макинтош /Users/{user}/Library/Application/Support/Blender/2.79/scripts/presets/
Windows C: \ Documents and Settings \% username% \ Application Data \ Blender Foundation \ Blender \ 2.79 \ scripts \ presets \
К сожалению, нет никакого способа импортировать / экспортировать пресеты, кроме как вручную копировать файлы (или делать оператор, который делает это). Также обратите внимание, что встроенная система предустановок включает только меню, которое мы часто видим в верхней части панелей управления и операторов. Если вы хотите иметь изображения, миниатюры и другие расширенные функции, вам придется развернуть свою собственную систему.
В Blender есть встроенная система пресетов, используемая для операторов и панелей. Хорошей новостью является то, что он основан на Python и прост в использовании. Пресеты - это файлы Python, которые устанавливают значения вручную. Когда вы выбираете пресет в меню, этот конкретный скрипт читается с диска и запускается. Добавление / удаление пресетов включает создание или удаление файлов py из папки пресетов. Это обрабатывается для нас, но вы, возможно, захотите помнить о других вещах (например, о настройках упаковки). Папка предустановок находится в вашей личной папке скриптов Blender.
Linux ~ / .Config / блендер / 2,79 / скрипты / пресетов /
Макинтош /Users/{user}/Library/Application/Support/Blender/2.79/scripts/presets/
Windows C: \ Documents and Settings \% username% \ Application Data \ Blender Foundation \ Blender \ 2.79 \ scripts \ presets \
К сожалению, нет никакого способа импортировать / экспортировать пресеты, кроме как вручную копировать файлы (или делать оператор, который делает это). Также обратите внимание, что встроенная система предустановок включает только меню, которое мы часто видим в верхней части панелей управления и операторов. Если вы хотите иметь изображения, миниатюры и другие расширенные функции, вам придется развернуть свою собственную систему.
Для операторов
Добавить предустановки к операторам так же просто, как и получается. Просто добавьте
PRESET
в bl_options
набор , и вы сделали.class My_OP(Operator):
bl_idname = "my.operator"
bl_label = 'My Cool OP'
bl_options = {'PRESET'}
Blender добавит предустановленное меню в пользовательский интерфейс оператора . Он даже создаст для них папку в каталоге пресетов! (обратите внимание, что для этого нужно сохранить хотя бы одну предустановку)
Для панелей
Использование системы предустановок на панелях требует немного больше работы. Это также обеспечивает дополнительную гибкость пользовательского интерфейса .
Сначала мы должны решить, где сохранить пресеты. Это может быть имя вашего аддона или категория с вашим аддоном в качестве подпапки. Для этого примера давайте используем 'object / my_presets' . Полный путь будет тогда
быть .
быть .
~/.config/blender/2.79/scripts/presets/object/my_presets/
Далее нам нужно сделать оператор для добавления / удаления пресетов. Давайте
AddPresetsBase
внесем миксин в смесь (ха!).from bl_operators.presets import AddPresetBase
class OT_AddMyPreset(AddPresetBase, Operator):
bl_idname = 'my.add_preset'
bl_label = 'Add A preset'
preset_menu = 'MT_MyPresets'
# Common variable used for all preset values
preset_defines = [
'obj = bpy.context.object',
'scene = bpy.context.scene'
]
# Properties to store in the preset
preset_values = [
'obj.show_axis',
'obj.show_name',
'obj.show_bounds',
'scene.world'
]
# Directory to store the presets
preset_subdir = 'object/my_presets'
В этом случае нет необходимости добавлять функцию или , так как миксин реализует их. Если вы хотите взглянуть на код этой магии, вы можете найти его в. Мы также можем использовать этот оператор для удаления предустановок, установив значение True.
execute()
invoke()
[BLENDER_FOLDER]/bin/2.79/scripts/startup/bl_operators/presets.py
remove_active
Мясной частью этого кода являются
preset_defines
и preset_values
свойства. Первый список позволяет вам объявлять переменные, общие для всех значений пресета. Это только для удобства. Это избавляет вас от необходимости набирать bpy.blah.bla снова и снова. Второй список - это фактические значения, которые будут сохранены в пресете. Когда оператор готов и готов, нам нужно сделать класс для меню и добавить все на панель.class MT_MyPresets(Menu):
bl_label = 'My Presets'
preset_subdir = 'object/my_presets'
preset_operator = 'script.execute_preset'
draw = Menu.draw_preset
# [...]
# This code goes in the panel's draw()
row = layout.row(align=True)
row.menu('MT_MyPresets', text='Presets')
row.operator('my.add_preset', text='', icon='ZOOMIN')
row.operator('my.add_preset', text='',
icon='ZOOMOUT').remove_active = True
Не меняйте
preset_operator
и draw
строки. Эти строки заставляют его выглядеть и работать как меню предустановок.Упаковка пресетов
Не существует «официального» способа упаковки пресетов с аддонами. Но так как они просто файлы, мы можем легко сделать это сами. Процесс выглядит следующим образом: сначала проверьте, существует ли папка предустановок, если это не так, это означает, что это впервые, когда аддон включен. В этом случае скопируйте файлы дополнений из папки дополнений в папку предустановок. Если он существует, мы можем предположить, что пресеты уже установлены (в этом случае мы ничего не делаем).
Мы можем сделать все это в функции.
register()
import os
import shutils
# [...]
my_presets = os.path.join(presets_folder, 'object', 'my_presets')
if not os.path.isdir(my_presets):
# makedirs() will also create all the parent folders (like "object")
os.makedirs(my_presets)
# Get a list of all the files in your bundled presets folder
files = os.listdir(my_bundled_presets)
# Copy them
[shutil.copy2(os.path.join(my_bundled_presets, f), my_presets)
for f in files]
Это все, что нужно знать о системе пресетов в Blender. Ну, по крайней мере, для серии 2,7х. Система получает некоторую любовь в 2,80 (в основном пользовательский интерфейс ). Надеюсь, будет больше улучшений по сравнению с серией 2.8x.
Комментариев нет:
Отправить комментарий