render_toolbox/properties.py
2025-07-25 10:55:04 +02:00

100 lines
3.6 KiB
Python

import bpy
import os
from bpy.types import PropertyGroup
from bpy.props import StringProperty
class RT_PG_render_toolbox_props(PropertyGroup):
default_base_path : StringProperty(
name="Base Path Template",
description="Template for file output base path\
\nFolder containing subsequent filepath",
default="//render/{node_label}/",
# options={'SKIP_SAVE'}
)
## Multilayer base path : output on file instead of folder
default_multilayer_base_path : StringProperty(
name="Base Path Template",
description="Template for multilayer file output base paths\
\nOutput of the file sequence",
default="//render/{node_label}/{node_label}_",
# options={'SKIP_SAVE'}
)
### file slots (not used currently)
default_file_slot : StringProperty(
name="File Slot Template",
description="Template for file output file slots\
\nSubpath added to base path for file sequence",
default="{socket_name}/{socket_name}_",
# options={'SKIP_SAVE'}
)
## Multilayer's layer: layer name in EXR instead of subpath to file
default_multilayer_name : StringProperty(
name="Layer Name Template",
description="Template for multilayer file output layer names\
\nLayer name in EXR multilayer file",
default="{socket_name}",
# options={'SKIP_SAVE'}
)
# default_tech_pass_name : StringProperty(
# name="Tech Pass Name Template",
# description="Template for tech pass file output layer names\
# \nLayer name in EXR multilayer file",
# default="tech",
# # options={'SKIP_SAVE'}
# )
# default_crypto_name : StringProperty(
# name="Crypto Pass Name Template",
# description="Template for crypto pass file output layer names\
# \nLayer name in EXR multilayer file",
# default="crypto",
# # options={'SKIP_SAVE'}
# )
def reset_scene_path_templates():
## set default template from environment variable if available, or fallback to preferences defaults
prefs = bpy.context.preferences.addons[__package__].preferences
if not prefs.use_env_base_path_templates:
# set from preferences
bpy.context.scene.render_toolbox.default_base_path = prefs.base_path_template
bpy.context.scene.render_toolbox.default_multilayer_base_path = prefs.base_path_multilayer_template
return
# set from environment variables (fallback to preferences if not set)
exr_base_path_template = os.getenv('RENDERTOOLBOX_EXR_PATH_TEMPLATE')
if exr_base_path_template:
bpy.context.scene.render_toolbox.default_base_path = exr_base_path_template
else:
bpy.context.scene.render_toolbox.default_base_path = prefs.base_path_template
multilayer_base_path_template = os.getenv('RENDERTOOLBOX_MULTILAYER_PATH_TEMPLATE')
if multilayer_base_path_template:
bpy.context.scene.render_toolbox.default_multilayer_base_path = multilayer_base_path_template
else:
bpy.context.scene.render_toolbox.default_multilayer_base_path = prefs.base_path_multilayer_template
classes = (
RT_PG_render_toolbox_props,
)
def register():
for cls in classes:
bpy.utils.register_class(cls)
bpy.types.Scene.render_toolbox = bpy.props.PointerProperty(type=RT_PG_render_toolbox_props)
# reset_scene_path_templates() # restricted context error when trying assignation here (probably need handler)
def unregister():
del bpy.types.Scene.render_toolbox
for cls in reversed(classes):
bpy.utils.unregister_class(cls)