Skip to content
Snippets Groups Projects
Commit dbe3331a authored by Bastien Montagne's avatar Bastien Montagne
Browse files

pep8 edits and a few other code styling. Non functionnaly changes.

parent 47830985
No related branches found
No related tags found
No related merge requests found
......@@ -33,30 +33,23 @@
# Renamed in “Render Copy Settings”.
# Huge changes:
# * It is now possible to individually copy each render setting.
# * It is now possible to individually select each affected scene, and then filter them out
# even further with a regex.
# WARNING: this addon now needs a Blender patched with the ui_template_list diff, else it won’t
# be fully functional…
# * It is now possible to individually select each affected scene, and
# then filter them out even further with a regex.
#
# 0.1.1
# Minor changes:
# * PEP8 compliant.
# * Moved to contrib…
# WARNING: this addon now needs a Blender patched with the ui_template_list diff, else it won’t
# be fully functional (even though working)…
#
# 0.1.2
# Minor changes:
# * Updated accordingly to the changes in enhanced ui_template_list proposal.
# WARNING: this addon now needs a Blender patched with the ui_template_list diff, else it won’t
# be fully functional (even though working)…
# * Updated accordingly to the changes in enhanced ui_template_list
# proposal.
#
# 0.1.3
# Minor changes:
# * Fixed a small bug that was disabling the whole UI when entering a filtering regex
# matching no scene.
# WARNING: this addon now needs a Blender patched with the ui_template_list diff, else it won’t
# be fully functional (even though working)…
# * Fixed a small bug that was disabling the whole UI when entering a
# filtering regex matching no scene.
#
# ##### END OF CHANGELOG #####
......@@ -67,10 +60,12 @@ bl_info = {
"blender": (2, 6, 1),
"api": 42648,
"location": "Render buttons (Properties window)",
"description": "Allows to copy a selection of render settings from current scene to others.",
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"\
"description": "Allows to copy a selection of render settings from " \
"current scene to others.",
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/" \
"Scripts/Render/Copy Settings",
"tracker_url": "http://projects.blender.org/tracker/index.php?func=detail&aid=25832",
"tracker_url": "http://projects.blender.org/tracker/index.php?" \
"func=detail&aid=25832",
"category": "Render"}
......@@ -84,28 +79,32 @@ else:
import bpy
from bpy.props import StringProperty, BoolProperty, IntProperty, CollectionProperty
from bpy.props import StringProperty, BoolProperty, \
IntProperty, CollectionProperty
####################################################################################################
# Global properties for the script, for UI (as there’s no way to let them in the operator…).
####################################################################################################
###############################################################################
# Global properties for the script, for UI (as there’s no way to let them in
# the operator…).
###############################################################################
class RenderCopySettingsScene(bpy.types.PropertyGroup):
allowed = BoolProperty(default=True)
# A string of identifiers (colon delimited) which property’s controls should be displayed
# in a template_list.
template_list_controls = StringProperty(default="allowed", options={"HIDDEN"})
# A string of identifiers (colon delimited) which property’s controls
# should be displayed in a template_list.
template_list_controls = StringProperty(default="allowed",
options={"HIDDEN"})
class RenderCopySettingsSetting(bpy.types.PropertyGroup):
strid = StringProperty(default="")
copy = BoolProperty(default=False)
# A string of identifiers (colon delimited) which property’s controls should be displayed
# in a template_list.
template_list_controls = StringProperty(default="copy", options={"HIDDEN"})
# A string of identifiers (colon delimited) which property’s controls
# should be displayed in a template_list.
template_list_controls = StringProperty(default="copy",
options={"HIDDEN"})
class RenderCopySettings(bpy.types.PropertyGroup):
......@@ -113,7 +112,9 @@ class RenderCopySettings(bpy.types.PropertyGroup):
# It should only contain one element for each render setting.
affected_settings = CollectionProperty(type=RenderCopySettingsSetting,
name="Affected Settings",
description="The list of all available render settings")
description="The list of all " \
"available render " \
"settings")
# XXX Unused, but needed for template_list…
aff_sett_idx = IntProperty()
......@@ -121,12 +122,14 @@ class RenderCopySettings(bpy.types.PropertyGroup):
# It should only contain one element for each scene.
allowed_scenes = CollectionProperty(type=RenderCopySettingsScene,
name="Allowed Scenes",
description="The list all scenes in the file")
description="The list all scenes " \
"in the file")
# XXX Unused, but needed for template_list…
allw_scenes_idx = IntProperty()
filter_scene = StringProperty(name="Filter Scene",
description="Regex to only affect scenes which name matches it",
description="Regex to only affect scenes " \
"which name matches it",
default="")
......
......@@ -21,13 +21,14 @@
import bpy
from . import presets
# These operators are only defined because it seems impossible to directly edit properties from
# UI code…
# These operators are only defined because it seems impossible to directly
# edit properties from UI code…
# A sorting func for collections (working in-place).
# XXX Not optimized at all…
# XXX If some items in the collection do not have the sortkey property, they are just ignored…
# XXX If some items in the collection do not have the sortkey property,
# they are just ignored…
def collection_property_sort(collection, sortkey, start_idx=0):
while start_idx + 1 < len(collection):
while not hasattr(collection[start_idx], sortkey):
......@@ -49,8 +50,8 @@ def collection_property_sort(collection, sortkey, start_idx=0):
class RenderCopySettingsPrepare(bpy.types.Operator):
'''
Prepare internal data for render_copy_settings (gathering all existing render settings,
and scenes)
Prepare internal data for render_copy_settings (gathering all existing
render settings, and scenes)
'''
bl_idname = "scene.render_copy_settings_prepare"
bl_label = "Render: Copy Settings Prepare"
......@@ -63,7 +64,8 @@ class RenderCopySettingsPrepare(bpy.types.Operator):
def execute(self, context):
cp_sett = context.scene.render_copy_settings
# Get all available render settings, and update accordingly affected_settings…
# Get all available render settings, and update accordingly
# affected_settings…
props = {}
for prop in context.scene.render.bl_rna.properties:
if prop.identifier in {'rna_type'}:
......@@ -74,7 +76,7 @@ class RenderCopySettingsPrepare(bpy.types.Operator):
corr = 0
for i, sett in enumerate(cp_sett.affected_settings):
if sett.strid not in props:
cp_sett.affected_settings.remove(i-corr)
cp_sett.affected_settings.remove(i - corr)
corr += 1
else:
del props[sett.strid]
......@@ -92,18 +94,19 @@ class RenderCopySettingsPrepare(bpy.types.Operator):
try:
regex = re.compile(cp_sett.filter_scene)
except Exception as e:
self.report('ERROR_INVALID_INPUT', "The filter-scene regex " \
"did not compile:\n (%s)." % str(e))
self.report('ERROR_INVALID_INPUT', "The filter-scene " \
"regex did not compile:\n (%s)." % str(e))
return {'CANCELLED'}
except:
regex = None
self.report('WARNING', "Unable to import the re module. Regex " \
"scene filtering will be disabled!")
self.report('WARNING', "Unable to import the re module. " \
"Regex scene filtering will be disabled!")
scenes = set()
for scene in bpy.data.scenes:
if scene == bpy.context.scene: # Exclude current scene!
continue
if regex: # If a valid filtering regex, only keep scenes matching it.
# If a valid filtering regex, only keep scenes matching it.
if regex:
if regex.match(scene.name):
scenes.add(scene.name)
else:
......@@ -163,7 +166,8 @@ class RenderCopySettingsPreset(bpy.types.Operator):
def do_copy(context, affected_settings, allowed_scenes):
# Stores render settings from current scene.
p = {sett: getattr(context.scene.render, sett) for sett in affected_settings}
p = {sett: getattr(context.scene.render, sett) \
for sett in affected_settings}
# put it in all other (valid) scenes’ render settings!
for scene in bpy.data.scenes:
# If scene not in allowed scenes, skip.
......@@ -188,9 +192,12 @@ class RenderCopySettings(bpy.types.Operator):
def execute(self, context):
regex = None
cp_sett = context.scene.render_copy_settings
affected_settings = set([sett.strid for sett in cp_sett.affected_settings if sett.copy])
allowed_scenes = set([sce.name for sce in cp_sett.allowed_scenes if sce.allowed])
do_copy(context, affected_settings=affected_settings, allowed_scenes=allowed_scenes)
affected_settings = {sett.strid for sett in cp_sett.affected_settings \
if sett.copy}
allowed_scenes = {sce.name for sce in cp_sett.allowed_scenes \
if sce.allowed}
do_copy(context, affected_settings=affected_settings,
allowed_scenes=allowed_scenes)
return {'FINISHED'}
......
......@@ -34,32 +34,35 @@ class RENDER_PT_copy_settings(bpy.types.Panel):
layout = self.layout
cp_sett = context.scene.render_copy_settings
layout.operator("scene.render_copy_settings", text="Copy Render Settings")
layout.operator("scene.render_copy_settings",
text="Copy Render Settings")
# This will update affected_settings/allowed_scenes (as this seems to be impossible
# to do it from here…).
# This will update affected_settings/allowed_scenes (as this seems
# to be impossible to do it from here…).
if bpy.ops.scene.render_copy_settings_prepare.poll():
bpy.ops.scene.render_copy_settings_prepare()
split = layout.split(0.75)
split.template_list(cp_sett, "affected_settings", cp_sett, "aff_sett_idx",
split.template_list(cp_sett, "affected_settings", cp_sett,
"aff_sett_idx",
prop_list="template_list_controls", rows=6)
col = split.column()
all_set = {sett.strid for sett in cp_sett.affected_settings if sett.copy}
all_set = {sett.strid for sett in cp_sett.affected_settings \
if sett.copy}
for p in presets.presets:
label = ""
if p.elements & all_set == p.elements:
label = "Clear {}".format(p.ui_name)
else:
label = "Set {}".format(p.ui_name)
col.operator("scene.render_copy_settings_preset", text=label, ).presets = {p.rna_enum[0]}
col.operator("scene.render_copy_settings_preset",
text=label).presets = {p.rna_enum[0]}
layout.prop(cp_sett, "filter_scene")
if len(cp_sett.allowed_scenes):
layout.label("Affected Scenes:")
# XXX Unfortunately, there can only be one template_list per panel…
# layout.template_list(cp_sett, "allowed_scenes", cp_sett, "allw_scenes_idx", rows=5)
col = layout.column_flow(columns=0)
for i, prop in enumerate(cp_sett.allowed_scenes):
col.prop(prop, "allowed", toggle=True, text=prop.name)
......
......@@ -18,6 +18,7 @@
# <pep8 compliant>
class CopyPreset(object):
def __init__(self, ui_name, rna_enum, elements):
self.ui_name = ui_name
......@@ -26,21 +27,25 @@ class CopyPreset(object):
presets = (CopyPreset("Resolution",
("resolution", "Render Resolution", "Render resolution and aspect ratio settings"),
{"resolution_x", "resolution_y", "pixel_aspect_x", "pixel_aspect_y"}),
("resolution", "Render Resolution",
"Render resolution and aspect ratio settings"),
{"resolution_x", "resolution_y",
"pixel_aspect_x", "pixel_aspect_y"}),
CopyPreset("Scale",
("scale", "Render Scale", "The “Render Scale” setting."),
("scale", "Render Scale", "The “Render Scale” setting"),
{"resolution_percentage"}),
CopyPreset("OSA",
("osa", "Render OSA", "The OSA toggle and sample settings."),
("osa", "Render OSA",
"The OSA toggle and sample settings"),
{"use_antialiasing", "antialiasing_samples"}),
CopyPreset("Threads",
("threads", "Render Threads", "The thread mode and number settings."),
("threads", "Render Threads",
"The thread mode and number settings"),
{"threads_mode", "threads"}),
CopyPreset("Fields",
("fields", "Render Fields", "The Fields settings."),
("fields", "Render Fields", "The Fields settings"),
{"use_fields", "field_order", "use_fields_still"}),
CopyPreset("Stamp",
("stamp", "Render Stamp", "The Stamp toggle."),
("stamp", "Render Stamp", "The Stamp toggle"),
{"use_stamp"})
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment