Skip to content
Snippets Groups Projects
Commit ad8093dd authored by kostex's avatar kostex
Browse files

render_renderslot: wrong usage of class and added auto advance option

parent dbd002fe
No related branches found
No related tags found
No related merge requests found
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
import bpy import bpy
from bpy.types import Operator from bpy.types import Operator
from bpy.props import IntProperty from bpy.props import IntProperty, BoolProperty
from sys import platform from sys import platform
from bpy.app.handlers import persistent from bpy.app.handlers import persistent
...@@ -26,7 +26,7 @@ from bpy.app.handlers import persistent ...@@ -26,7 +26,7 @@ from bpy.app.handlers import persistent
bl_info = { bl_info = {
"name": "KTX RenderSlot", "name": "KTX RenderSlot",
"author": "Roel Koster, @koelooptiemanna, irc:kostex", "author": "Roel Koster, @koelooptiemanna, irc:kostex",
"version": (1, 2, 1), "version": (1, 2, 5),
"blender": (2, 7, 0), "blender": (2, 7, 0),
"location": "Properties Editor > Render > Render", "location": "Properties Editor > Render > Render",
"category": "Render"} "category": "Render"}
...@@ -35,10 +35,23 @@ bl_info = { ...@@ -35,10 +35,23 @@ bl_info = {
nullpath = '/nul' if platform == 'win32' else '/dev/null' nullpath = '/nul' if platform == 'win32' else '/dev/null'
class SlotBuffer: class OccupiedSlots:
data = '00000000' data = '00000000'
class KTX_Renderslot_Prefs(bpy.types.AddonPreferences):
bl_idname = __name__
advanced_mode = bpy.props.BoolProperty(
name="Advanced Mode",
description="Gives the addon some advanced options",
default=False)
def draw(self, context):
layout = self.layout
layout.prop(self, "advanced_mode")
class KTX_RenderSlot(Operator): class KTX_RenderSlot(Operator):
bl_label = "Select Render Slot" bl_label = "Select Render Slot"
bl_idname = "ktx.renderslot" bl_idname = "ktx.renderslot"
...@@ -54,12 +67,8 @@ class KTX_RenderSlot(Operator): ...@@ -54,12 +67,8 @@ class KTX_RenderSlot(Operator):
return {'FINISHED'} return {'FINISHED'}
class KTX_CheckSlots(Operator): @persistent
bl_label = "Check Render Slots" def checkslots(scene):
bl_idname = "ktx.checkslots"
bl_description = "Check Render Slots Occupation"
def execute(self, context):
img = bpy.data.images['Render Result'] img = bpy.data.images['Render Result']
active = img.render_slots.active_index active = img.render_slots.active_index
slots = '' slots = ''
...@@ -68,52 +77,56 @@ class KTX_CheckSlots(Operator): ...@@ -68,52 +77,56 @@ class KTX_CheckSlots(Operator):
try: try:
img.save_render(nullpath) img.save_render(nullpath)
slots = slots + '1' slots = slots + '1'
except: except RuntimeError:
slots = slots + '0' slots = slots + '0'
bpy.context.scene.ktx_occupied_render_slots.data = slots scene.ktx_occupied_render_slots.data = slots
if scene.ktx_auto_advance_slot:
active += 1
if active == 8:
active = 0
img.render_slots.active_index = active img.render_slots.active_index = active
return {'FINISHED'}
def ui(self, context): def ui(self, context):
scn = context.scene
layout = self.layout layout = self.layout
row = layout.row(align=True) row = layout.row(align=True)
row.alignment = 'LEFT' row.alignment = 'LEFT'
try: try:
active = bpy.data.images['Render Result'].render_slots.active_index active = bpy.data.images['Render Result'].render_slots.active_index
if bpy.context.user_preferences.addons[__name__].preferences.advanced_mode:
row.prop(scn, 'ktx_auto_advance_slot', 'Auto Advance')
row = layout.row(align=True) row = layout.row(align=True)
row.alignment = 'EXPAND' row.alignment = 'EXPAND'
for i in range(8): for i in range(8):
is_active = bool(i == active) is_active = bool(i == active)
test_active = bool(bpy.context.scene.ktx_occupied_render_slots.data[i] == '1') test_active = bool(scn.ktx_occupied_render_slots.data[i] == '1')
icons = "LAYER_ACTIVE" if test_active else "BLANK1" icons = "LAYER_ACTIVE" if test_active else "BLANK1"
label = "[{}]".format(str(i + 1)) if is_active else str(i + 1) label = "[{}]".format(str(i + 1)) if is_active else str(i + 1)
row.operator('ktx.renderslot', text=label, icon=icons).number = i row.operator('ktx.renderslot', text=label, icon=icons).number = i
except: except:
scn.ktx_occupied_render_slots.data = '00000000'
row.label(text="No Render Slots available yet", icon="INFO") row.label(text="No Render Slots available yet", icon="INFO")
@persistent
def ktx_render_handler(scene):
bpy.ops.ktx.checkslots()
def register(): def register():
bpy.utils.register_module(__name__) bpy.utils.register_module(__name__)
bpy.types.RENDER_PT_render.prepend(ui) bpy.types.RENDER_PT_render.prepend(ui)
bpy.types.Scene.ktx_occupied_render_slots = SlotBuffer bpy.types.Scene.ktx_auto_advance_slot = BoolProperty(default=False, description="Auto Advance to Next Slot after a Render")
bpy.types.Scene.ktx_occupied_render_slots = OccupiedSlots
bpy.app.handlers.render_post.append(ktx_render_handler) bpy.app.handlers.render_post.append(checkslots)
def unregister(): def unregister():
bpy.utils.unregister_module(__name__) bpy.utils.unregister_module(__name__)
bpy.types.RENDER_PT_render.remove(ui) bpy.types.RENDER_PT_render.remove(ui)
del bpy.types.Scene.ktx_occupied_render_slots del bpy.types.Scene.ktx_occupied_render_slots
del bpy.types.Scene.ktx_auto_advance_slot
bpy.app.handlers.render_post.remove(ktx_render_handler) bpy.app.handlers.render_post.remove(checkslots)
if __name__ == "__main__": if __name__ == "__main__":
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment