Fix T52839: "Copy Render Settings" doesn't work.

Recent removing of registered types from bpy.types broke this, had to
twist a bit around to get it working again...
This commit is contained in:
Bastien Montagne 2017-09-20 12:28:38 +02:00
parent 0c693054d0
commit 267662e07a
Notes: blender-bot 2023-02-14 19:35:24 +01:00
Referenced by issue #53948, Addon Copy-settings
Referenced by issue #52839, "Copy Render Settings" doesn't work
3 changed files with 80 additions and 51 deletions

View File

@ -21,8 +21,8 @@
bl_info = {
"name": "Copy Settings",
"author": "Bastien Montagne",
"version": (0, 1, 6),
"blender": (2, 65, 9),
"version": (0, 1, 7),
"blender": (2, 79, 1),
"location": "Render buttons (Properties window)",
"description": "Allows to copy a selection of render settings "
"from current scene to others.",
@ -34,12 +34,14 @@ bl_info = {
if "bpy" in locals():
import importlib
importlib.reload(data)
importlib.reload(operator)
importlib.reload(panel)
importlib.reload(translations)
else:
from . import (
data,
operator,
panel,
translations,
@ -48,59 +50,17 @@ else:
import bpy
from bpy.props import (
StringProperty,
BoolProperty,
IntProperty,
CollectionProperty,
PointerProperty,
)
########################################################################################################################
# Global properties for the script, for UI (as theres no way to let them in the operator…).
########################################################################################################################
class RenderCopySettingsDataScene(bpy.types.PropertyGroup):
allowed = BoolProperty(default=True)
class RenderCopySettingsDataSetting(bpy.types.PropertyGroup):
strid = StringProperty(default="")
copy = BoolProperty(default=False)
class RenderCopySettingsData(bpy.types.PropertyGroup):
# XXX: The consistency of this collection is delegated to the UI code.
# It should only contain one element for each render setting.
affected_settings = CollectionProperty(type=RenderCopySettingsDataSetting,
name="Affected Settings",
description="The list of all available render settings")
# XXX Unused, but needed for template_list…
affected_settings_idx = IntProperty()
# XXX: The consistency of this collection is delegated to the UI code.
# It should only contain one element for each scene.
allowed_scenes = CollectionProperty(type=RenderCopySettingsDataScene,
name="Allowed Scenes",
description="The list all scenes in the file")
# XXX Unused, but needed for template_list…
allowed_scenes_idx = IntProperty()
filter_scene = StringProperty(name="Filter Scene",
description="Regex to only affect scenes which name matches it",
default="")
classes = (
RenderCopySettingsDataScene,
RenderCopySettingsDataSetting,
RenderCopySettingsData,
) + operator.classes + panel.classes
classes = data.classes + operator.classes + panel.classes
def register():
for cls in classes:
bpy.utils.register_class(cls)
bpy.types.Scene.render_copy_settings = PointerProperty(type=RenderCopySettingsData)
bpy.types.Scene.render_copy_settings = PointerProperty(type=data.RenderCopySettingsData)
bpy.app.translations.register(__name__, translations.translations_dict)

View File

@ -0,0 +1,68 @@
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8 compliant>
import bpy
from bpy.props import (
StringProperty,
BoolProperty,
IntProperty,
CollectionProperty,
)
########################################################################################################################
# Global properties for the script, for UI (as theres no way to let them in the operator…).
########################################################################################################################
class RenderCopySettingsDataScene(bpy.types.PropertyGroup):
allowed = BoolProperty(default=True)
class RenderCopySettingsDataSetting(bpy.types.PropertyGroup):
strid = StringProperty(default="")
copy = BoolProperty(default=False)
class RenderCopySettingsData(bpy.types.PropertyGroup):
# XXX: The consistency of this collection is delegated to the UI code.
# It should only contain one element for each render setting.
affected_settings = CollectionProperty(type=RenderCopySettingsDataSetting,
name="Affected Settings",
description="The list of all available render settings")
# XXX Unused, but needed for template_list…
affected_settings_idx = IntProperty()
# XXX: The consistency of this collection is delegated to the UI code.
# It should only contain one element for each scene.
allowed_scenes = CollectionProperty(type=RenderCopySettingsDataScene,
name="Allowed Scenes",
description="The list all scenes in the file")
# XXX Unused, but needed for template_list…
allowed_scenes_idx = IntProperty()
filter_scene = StringProperty(name="Filter Scene",
description="Regex to only affect scenes which name matches it",
default="")
classes = (
RenderCopySettingsDataScene,
RenderCopySettingsDataSetting,
RenderCopySettingsData,
)

View File

@ -20,23 +20,24 @@
import bpy
from . import presets
from . import data as data_types
class RENDER_UL_copy_settings(bpy.types.UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
#assert(isinstance(item, (bpy.types.RenderCopySettingsScene, bpy.types.RenderCopySettingsDataSetting)))
#assert(isinstance(item, (data_types.RenderCopySettingsScene, data_types.RenderCopySettingsDataSetting)))
if self.layout_type in {'DEFAULT', 'COMPACT'}:
if isinstance(item, bpy.types.RenderCopySettingsDataSetting):
if isinstance(item, data_types.RenderCopySettingsDataSetting):
layout.label(item.name, icon_value=icon)
layout.prop(item, "copy", text="")
else: #elif isinstance(item, bpy.types.RenderCopySettingsDataScene):
else: #elif isinstance(item, data_types.RenderCopySettingsDataScene):
layout.prop(item, "allowed", text=item.name, toggle=True)
elif self.layout_type in {'GRID'}:
layout.alignment = 'CENTER'
if isinstance(item, bpy.types.RenderCopySettingsDataSetting):
if isinstance(item, data_types.RenderCopySettingsDataSetting):
layout.label(item.name, icon_value=icon)
layout.prop(item, "copy", text="")
else: #elif isinstance(item, bpy.types.RenderCopySettingsDataScene):
else: #elif isinstance(item, data_types.RenderCopySettingsDataScene):
layout.prop(item, "allowed", text=item.name, toggle=True)