Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'render_copy_settings/operator.py')
-rw-r--r--render_copy_settings/operator.py126
1 files changed, 57 insertions, 69 deletions
diff --git a/render_copy_settings/operator.py b/render_copy_settings/operator.py
index 5c633f1f..5de9bc3d 100644
--- a/render_copy_settings/operator.py
+++ b/render_copy_settings/operator.py
@@ -21,9 +21,6 @@
import bpy
from . import presets
-# 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…
@@ -46,74 +43,66 @@ def collection_property_sort(collection, sortkey, start_idx=0):
return collection
-class RenderCopySettingsOPPrepare(bpy.types.Operator):
- """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"
- bl_option = {'REGISTER'}
-
- @classmethod
- def poll(cls, context):
- return context.scene is not None
-
- def execute(self, context):
- cp_sett = context.scene.render_copy_settings
+def scene_render_copy_settings_update():
+ """Prepare internal data for render_copy_settings (gathering all existing render settings, and scenes)."""
+ current_scene = getattr(bpy.context, "scene", None)
+ if current_scene is None:
+ return
+ cp_sett = current_scene.render_copy_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'}:
- continue
- if prop.is_readonly:
- continue
- props[prop.identifier] = prop.name
- corr = 0
- for i, sett in enumerate(cp_sett.affected_settings):
- if sett.strid not in props:
- cp_sett.affected_settings.remove(i - corr)
- corr += 1
- else:
- del props[sett.strid]
- for strid, name in props.items():
- sett = cp_sett.affected_settings.add()
- sett.name = "{} [{}]".format(name, strid)
- sett.strid = strid
- collection_property_sort(cp_sett.affected_settings, "name")
-
- # Get all available scenes, and update accordingly allowed_scenes…
- regex = None
- if cp_sett.filter_scene:
+ # Get all available render settings, and update accordingly affected_settings…
+ props = {}
+ for prop in current_scene.render.bl_rna.properties:
+ if prop.identifier in {'rna_type'}:
+ continue
+ if prop.is_readonly:
+ continue
+ props[prop.identifier] = prop.name
+ corr = 0
+ for i, sett in enumerate(cp_sett.affected_settings):
+ if sett.strid not in props:
+ cp_sett.affected_settings.remove(i - corr)
+ corr += 1
+ else:
+ del props[sett.strid]
+ for strid, name in props.items():
+ sett = cp_sett.affected_settings.add()
+ sett.name = "{} [{}]".format(name, strid)
+ sett.strid = strid
+ collection_property_sort(cp_sett.affected_settings, "name")
+
+ # Get all available scenes, and update accordingly allowed_scenes…
+ regex = None
+ if cp_sett.filter_scene:
+ try:
+ import re
try:
- import re
- 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))
- return {'CANCELLED'}
- except:
- regex = None
- 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 a valid filtering regex, only keep scenes matching it.
- if regex:
- if regex.match(scene.name):
- scenes.add(scene.name)
- else:
+ regex = re.compile(cp_sett.filter_scene)
+ except Exception as e:
+ print("The filter-scene regex did not compile:\n (%s)." % str(e))
+ return
+ except:
+ regex = None
+ print("Unable to import the re module, regex scene filtering will be disabled!")
+ scenes = set()
+ for scene in bpy.data.scenes:
+ if scene == current_scene: # Exclude current scene!
+ continue
+ # If a valid filtering regex, only keep scenes matching it.
+ if regex:
+ if regex.match(scene.name):
scenes.add(scene.name)
- for i, scene in enumerate(cp_sett.allowed_scenes):
- if scene.name not in scenes:
- cp_sett.allowed_scenes.remove(i)
- else:
- scenes.remove(scene.name)
- for scene in scenes:
- sett = cp_sett.allowed_scenes.add()
- sett.name = scene
- collection_property_sort(cp_sett.allowed_scenes, "name")
-
- return {'FINISHED'}
+ else:
+ scenes.add(scene.name)
+ for i, scene in enumerate(cp_sett.allowed_scenes):
+ if scene.name not in scenes:
+ cp_sett.allowed_scenes.remove(i)
+ else:
+ scenes.remove(scene.name)
+ for scene in scenes:
+ sett = cp_sett.allowed_scenes.add()
+ sett.name = scene
+ collection_property_sort(cp_sett.allowed_scenes, "name")
from bpy.props import EnumProperty
@@ -191,7 +180,6 @@ class RenderCopySettingsOPCopy(bpy.types.Operator):
classes = (
- RenderCopySettingsOPPrepare,
RenderCopySettingsOPPreset,
RenderCopySettingsOPCopy,
)