I'm trying to combine Render-Presets with Camera-Presets. Why is this script causing an Error? What does it mean: "Python: Traceback (most recent call last): File "C:\Program Files\Blender Foundation\Blender 2.91\2.91\scripts\startup\bl_operators\presets.py", line 166, in execute exec(rna_path) File "", line 1, in AttributeError: 'NoneType' object has no attribute 'data'
location: :-1 " ?
This Error is coming also if a Camera is selected.
How can I make it work?
Here is the script:
import bpy
from bpy.types import Operator, Menu
from bl_operators.presets import AddPresetBase
class OBJECT_MT_display_presets(Menu):
bl_label = "Object Display Presets"
preset_subdir = "object/display"
preset_operator = "script.execute_preset"
draw = Menu.draw_preset
class AddPresetObjectDisplay(AddPresetBase, Operator):
'''Add a Object Display Preset'''
bl_idname = "camera.object_display_preset_add"
bl_label = "Add Object Display Preset"
preset_menu = "OBJECT_MT_display_presets"
# variable used for all preset values
preset_defines = [
"render = bpy.context.scene.render",
"data = bpy.context.object.data"
]
# properties to store in the preset
preset_values = [
"render.engine",
"render.use_stamp",
"data.cycles.fisheye_lens",
"data.cycles.fisheye_fov",
"data.shift_x",
"data.shift_y"
]
# where to store the preset
preset_subdir = "Test_Folder"
# Display into an existing panel
def panel_func(self, context):
layout = self.layout
row = layout.row(align=True)
row.menu(OBJECT_MT_display_presets.__name__, text=OBJECT_MT_display_presets.bl_label)
row.operator(AddPresetObjectDisplay.bl_idname, text="", icon='ZOOM_IN')
row.operator(AddPresetObjectDisplay.bl_idname, text="", icon='ZOOM_OUT').remove_active = True
classes = (
OBJECT_MT_display_presets,
AddPresetObjectDisplay,
)
def register():
for cls in classes:
bpy.utils.register_class(cls)
bpy.types.RENDER_PT_context.prepend(panel_func)
def unregister():
for cls in classes:
bpy.utils.unregister_class(cls)
bpy.types.RENDER_PT_context.remove(panel_func)
if __name__ == "__main__":
register()