change python scripts so modules which register with blender have a register() function rather then making import automatically run the register functions (generally considered bad practice by python people)

This commit is contained in:
2010-02-14 11:21:21 +00:00
parent b02f78ed02
commit 39c04315e2
76 changed files with 1310 additions and 592 deletions

View File

@@ -854,7 +854,6 @@ class PovrayRender(bpy.types.RenderEngine):
self._cleanup()
bpy.types.register(PovrayRender)
# Use some of the existing buttons.
import properties_render
@@ -944,4 +943,18 @@ class RENDER_PT_povray_radiosity(RenderButtonsPanel):
col = split.column()
col.prop(scene, "pov_radio_always_sample")
bpy.types.register(RENDER_PT_povray_radiosity)
classes = [
PovrayRender,
RENDER_PT_povray_radiosity]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -1136,11 +1136,17 @@ class Export3DS(bpy.types.Operator):
def poll(self, context): # Poll isnt working yet
return context.active_object != None
bpy.types.register(Export3DS)
# Add to a menu
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".3ds")
self.layout.operator(Export3DS.bl_idname, text="Autodesk 3DS...").path = default_path
bpy.types.INFO_MT_file_export.append(menu_func)
def register():
bpy.types.register(Export3DS)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
bpy.types.unregister(Export3DS)
bpy.types.INFO_MT_file_export.remove(menu_func)

View File

@@ -3435,7 +3435,7 @@ class ExportFBX(bpy.types.Operator):
return {'RUNNING_MODAL'}
bpy.types.register(ExportFBX)
# if __name__ == "__main__":
# bpy.ops.EXPORT_OT_ply(filename="/tmp/test.ply")
@@ -3467,4 +3467,11 @@ def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".fbx")
self.layout.operator(ExportFBX.bl_idname, text="Autodesk FBX...").path = default_path
menu_item = bpy.types.INFO_MT_file_export.append(menu_func)
def register():
bpy.types.register(ExportFBX)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
bpy.types.unregister(ExportFBX)
bpy.types.INFO_MT_file_export.remove(menu_func)

View File

@@ -181,14 +181,16 @@ class ExportMDD(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
bpy.types.register(ExportMDD)
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".mdd")
self.layout.operator(ExportMDD.bl_idname, text="Vertex Keyframe Animation (.mdd)...").path = default_path
bpy.types.INFO_MT_file_export.append(menu_func)
if __name__ == '__main__':
bpy.ops.export.mdd(path="/tmp/test.mdd")
def register():
bpy.types.register(ExportMDD)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
bpy.types.unregister(ExportMDD)
bpy.types.INFO_MT_file_export.remove(menu_func)

View File

@@ -958,16 +958,20 @@ class ExportOBJ(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
bpy.types.register(ExportOBJ)
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".obj")
self.layout.operator(ExportOBJ.bl_idname, text="Wavefront (.obj)...").path = default_path
menu_item = bpy.types.INFO_MT_file_export.append(menu_func)
if __name__ == "__main__":
bpy.ops.EXPORT_OT_obj(filename="/tmp/test.obj")
def register():
bpy.types.register(ExportOBJ)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
bpy.types.unregister(ExportOBJ)
bpy.types.INFO_MT_file_export.remove(menu_func)
# CONVERSION ISSUES
# - matrix problem

View File

@@ -313,14 +313,15 @@ class ExportPLY(bpy.types.Operator):
row.prop(props, "use_colors")
bpy.types.register(ExportPLY)
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".ply")
self.layout.operator(ExportPLY.bl_idname, text="Stanford (.ply)...").path = default_path
bpy.types.INFO_MT_file_export.append(menu_func)
if __name__ == "__main__":
bpy.ops.export.ply(path="/tmp/test.ply")
def register():
bpy.types.register(ExportPLY)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
bpy.types.unregister(ExportPLY)
bpy.types.INFO_MT_file_export.remove(menu_func)

View File

@@ -1242,14 +1242,19 @@ class ExportX3D(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
bpy.types.register(ExportX3D)
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".x3d")
self.layout.operator(ExportX3D.bl_idname, text="X3D Extensible 3D (.x3d)...").path = default_path
bpy.types.INFO_MT_file_export.append(menu_func)
def register():
bpy.types.register(ExportX3D)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
bpy.types.unregister(ExportX3D)
bpy.types.INFO_MT_file_export.remove(menu_func)
# NOTES
# - blender version is hardcoded

View File

@@ -895,7 +895,12 @@ class BvhImporter(bpy.types.Operator):
return {'RUNNING_MODAL'}
bpy.types.register(BvhImporter)
menu_func = lambda self, context: self.layout.operator(BvhImporter.bl_idname, text="Motion Capture (.bvh)...")
bpy.types.INFO_MT_file_import.append(menu_func)
def register():
bpy.types.register(BvhImporter)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
bpy.types.unregister(BvhImporter)
bpy.types.INFO_MT_file_export.remove(menu_func)

View File

@@ -1031,10 +1031,17 @@ class IMPORT_OT_autodesk_3ds(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
bpy.types.register(IMPORT_OT_autodesk_3ds)
menu_func = lambda self, context: self.layout.operator(IMPORT_OT_autodesk_3ds.bl_idname, text="3D Studio (.3ds)...")
bpy.types.INFO_MT_file_import.append(menu_func)
def register():
bpy.types.register(IMPORT_OT_autodesk_3ds)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
bpy.types.unregister(IMPORT_OT_autodesk_3ds)
bpy.types.INFO_MT_file_export.remove(menu_func)
# NOTES:
# why add 1 extra vertex? and remove it when done? - "Answer - eekadoodle - would need to re-order UV's without this since face order isnt always what we give blender, BMesh will solve :D"

View File

@@ -1623,11 +1623,16 @@ class IMPORT_OT_obj(bpy.types.Operator):
return {'RUNNING_MODAL'}
bpy.types.register(IMPORT_OT_obj)
menu_func = lambda self, context: self.layout.operator(IMPORT_OT_obj.bl_idname, text="Wavefront (.obj)...")
menu_item = bpy.types.INFO_MT_file_import.append(menu_func)
def register():
bpy.types.register(IMPORT_OT_obj)
bpy.types.INFO_MT_file_export.append(menu_func)
def unregister():
bpy.types.unregister(IMPORT_OT_obj)
bpy.types.INFO_MT_file_export.remove(menu_func)
# NOTES (all line numbers refer to 2.4x import_obj.py, not this file)

View File

@@ -35,3 +35,9 @@ blacklist = []
init_file = ""
init_data = True
init_address = True
def register():
pass # TODO
def unregister():
pass # TODO

View File

@@ -56,7 +56,7 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
def test_reload(module):
try:
reload(module)
return reload(module)
except:
traceback.print_exc()
@@ -97,7 +97,15 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
if reload_scripts and mod:
print("Reloading:", mod)
test_reload(mod)
mod = test_reload(mod)
if mod:
register = getattr(mod, "register", None)
if register:
register()
else:
print("\nWarning! '%s%s%s' has no register function, this is now a requirement for registerable scripts." % (path, _os.sep, f))
if _bpy.app.debug:
print("Time %.4f" % (time.time() - t_main))

View File

@@ -448,9 +448,9 @@ class _GenericUI:
if draw_funcs is None:
def draw_ls(*args):
def draw_ls(self, context):
for func in draw_ls._draw_funcs:
func(*args)
func(self, context)
draw_funcs = draw_ls._draw_funcs = [cls.draw]
cls.draw = draw_ls
@@ -469,6 +469,12 @@ class _GenericUI:
draw_funcs = cls._dyn_ui_initialize()
draw_funcs.insert(0, draw_func)
@classmethod
def remove(cls, draw_func):
"""Remove a draw function that has been added to this menu"""
draw_funcs = cls._dyn_ui_initialize()
draw_funcs.remove(draw_func)
class Panel(StructRNA, _GenericUI):
__slots__ = ()

View File

@@ -600,14 +600,17 @@ class AddHuman(bpy.types.Operator):
bpy.ops.object.mode_set(mode=mode_orig)
return {'FINISHED'}
# Register the operator
bpy.types.register(AddHuman)
# Add to a menu
menu_func = (lambda self, context: self.layout.operator(AddHuman.bl_idname,
icon='OUTLINER_OB_ARMATURE', text="Human (Meta-Rig)"))
bpy.types.INFO_MT_armature_add.append(menu_func)
if __name__ == "__main__":
bpy.ops.mesh.armature_human_advanced_add()
def register():
bpy.types.register(AddHuman)
bpy.types.INFO_MT_armature_add.append(menu_func)
def unregister():
bpy.types.unregister(AddHuman)
bpy.types.INFO_MT_armature_add.remove(menu_func)

View File

@@ -157,14 +157,15 @@ class AddTorus(bpy.types.Operator):
return {'FINISHED'}
# Register the operator
bpy.types.register(AddTorus)
# Add to the menu
menu_func = (lambda self, context: self.layout.operator(AddTorus.bl_idname,
text="Torus", icon='MESH_DONUT'))
bpy.types.INFO_MT_mesh_add.append(menu_func)
if __name__ == "__main__":
bpy.ops.mesh.primitive_torus_add()
def register():
bpy.types.register(AddTorus)
bpy.types.INFO_MT_mesh_add.append(menu_func)
def unregister():
bpy.types.unregister(AddTorus)
bpy.types.INFO_MT_mesh_add.remove(menu_func)

View File

@@ -196,3 +196,9 @@ def banner(context):
console.locals["C"] = bpy.context
return {'FINISHED'}
def register():
pass
def unregister():
pass

View File

@@ -76,3 +76,10 @@ def banner(context):
sc.prompt = os.getcwd() + PROMPT
return {'FINISHED'}
def register():
pass
def unregister():
pass

View File

@@ -55,7 +55,11 @@ class DiscontFilterOp(bpy.types.Operator):
main(context)
return {'FINISHED'}
bpy.types.register(DiscontFilterOp)
def register():
bpy.types.register(DiscontFilterOp)
def unregister():
bpy.types.unregister(DiscontFilterOp)
if __name__ == "__main__":
bpy.ops.graph.discont_filter()

View File

@@ -41,4 +41,9 @@ class SaveDirty(bpy.types.Operator):
image.save(path=path)
return {'FINISHED'}
bpy.types.register(SaveDirty)
def register():
bpy.types.register(SaveDirty)
def unregister():
bpy.types.unregister(SaveDirty)

View File

@@ -173,10 +173,20 @@ class MeshMirrorUV(bpy.types.Operator):
return {'FINISHED'}
# Register the operator
bpy.types.register(MeshSelectInteriorFaces)
bpy.types.register(MeshMirrorUV)
if __name__ == "__main__":
# bpy.ops.mesh.faces_select_interior()
bpy.ops.mesh.faces_miror_uv()
# Register the operator
classes = [
MeshSelectInteriorFaces,
MeshMirrorUV]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -466,13 +466,23 @@ class MakeDupliFace(bpy.types.Operator):
self._main(context)
return {'FINISHED'}
# if __name__ == "__main__":
# bpy.ops.uv.simple_operator()
classes = [
SelectPattern,
SelectCamera,
SubdivisionSet,
ShapeTransfer,
JoinUVs,
MakeDupliFace]
bpy.types.register(SelectPattern)
bpy.types.register(SelectCamera)
bpy.types.register(SubdivisionSet)
bpy.types.register(ShapeTransfer)
bpy.types.register(JoinUVs)
bpy.types.register(MakeDupliFace)
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -197,11 +197,16 @@ class AlignObjects(bpy.types.Operator):
return {'FINISHED'}
bpy.types.register(AlignObjects)
def menu_func(self, context):
if context.mode == 'OBJECT':
self.layout.operator(AlignObjects.bl_idname,
text="Align Objects")
bpy.types.VIEW3D_MT_transform.append(menu_func)
def register():
bpy.types.register(AlignObjects)
bpy.types.VIEW3D_MT_transform.append(menu_func)
def unregister():
bpy.types.unregister(AlignObjects)
bpy.types.VIEW3D_MT_transform.remove(menu_func)

View File

@@ -134,13 +134,17 @@ class RandomizeLocRotSize(bpy.types.Operator):
return {'FINISHED'}
# Register the operator
bpy.types.register(RandomizeLocRotSize)
def menu_func(self, context):
if context.mode == 'OBJECT':
self.layout.operator(RandomizeLocRotSize.bl_idname,
text="Randomize Transform")
bpy.types.VIEW3D_MT_transform.append(menu_func)
def register():
bpy.types.register(RandomizeLocRotSize)
bpy.types.VIEW3D_MT_transform.append(menu_func)
def unregister():
bpy.types.unregister(RandomizeLocRotSize)
bpy.types.VIEW3D_MT_transform.remove(menu_func)

View File

@@ -158,7 +158,20 @@ class AddPresetSunSky(AddPresetBase):
preset_subdir = "sunsky"
bpy.types.register(AddPresetRender)
bpy.types.register(AddPresetSSS)
bpy.types.register(AddPresetCloth)
bpy.types.register(AddPresetSunSky)
classes = [
AddPresetRender,
AddPresetSSS,
AddPresetCloth,
AddPresetSunSky]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -114,4 +114,9 @@ class PlayRenderedAnim(bpy.types.Operator):
return('FINISHED',)
bpy.types.register(PlayRenderedAnim)
def register():
bpy.types.register(PlayRenderedAnim)
def unregister():
bpy.types.unregister(PlayRenderedAnim)

View File

@@ -70,7 +70,12 @@ class SequencerCrossfadeSounds(bpy.types.Operator):
self.report({'ERROR'}, "The selected strips don't overlap.")
return {'CANCELLED'}
bpy.types.register(SequencerCrossfadeSounds)
def register():
bpy.types.register(SequencerCrossfadeSounds)
def unregister():
bpy.types.unregister(SequencerCrossfadeSounds)
if __name__ == "__main__":
bpy.ops.sequencer.crossfade_sounds()

View File

@@ -196,15 +196,16 @@ class ExportUVLayout(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
# Register the operator
bpy.types.register(ExportUVLayout)
def menu_func(self, context):
default_path = bpy.data.filename.replace(".blend", ".svg")
self.layout.operator(ExportUVLayout.bl_idname).path = default_path
bpy.types.IMAGE_MT_uvs.append(menu_func)
#if __name__ == "__main__":
# bpy.ops.uv.export_layout(path="/home/ideasman42/foo.svg")
def register():
bpy.types.register(ExportUVLayout)
bpy.types.IMAGE_MT_uvs.append(menu_func)
def unreguster():
bpy.types.unregister(ExportUVLayout)
bpy.types.IMAGE_MT_uvs.remove(menu_func)

View File

@@ -259,11 +259,16 @@ class FollowActiveQuads(bpy.types.Operator):
main(context, self)
return {'FINISHED'}
bpy.types.register(FollowActiveQuads)
# Add to a menu
menu_func = (lambda self, context: self.layout.operator(FollowActiveQuads.bl_idname))
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
if __name__ == '__main__':
bpy.ops.uv.follow_active_quads()
def register():
bpy.types.register(FollowActiveQuads)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
def unregister():
bpy.types.unregister(FollowActiveQuads)
bpy.types.VIEW3D_MT_uv_map.remove(menu_func)

View File

@@ -1134,13 +1134,16 @@ class SmartProject(bpy.types.Operator):
main(context, self.properties.island_margin, self.properties.angle_limit)
return {'FINISHED'}
bpy.types.register(SmartProject)
# Add to a menu
menu_func = (lambda self, context: self.layout.operator(SmartProject.bl_idname,
text="Smart Project"))
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
if __name__ == '__main__':
bpy.ops.uv.smart_project()
def register():
bpy.types.register(SmartProject)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
def unregister():
bpy.types.unregister(SmartProject)
bpy.types.VIEW3D_MT_uv_map.remove(menu_func)

View File

@@ -174,7 +174,10 @@ class VertexPaintDirt(bpy.types.Operator):
return('FINISHED',)
bpy.types.register(VertexPaintDirt)
if __name__ == "__main__":
bpy.ops.mesh.vertex_paint_dirt()
def register():
bpy.types.register(VertexPaintDirt)
def unregister():
bpy.types.unregister(VertexPaintDirt)

View File

@@ -418,26 +418,38 @@ class WM_OT_reload_scripts(bpy.types.Operator):
return {'FINISHED'}
bpy.types.register(MESH_OT_delete_edgeloop)
bpy.types.register(WM_OT_context_set_boolean)
bpy.types.register(WM_OT_context_set_int)
bpy.types.register(WM_OT_context_set_float)
bpy.types.register(WM_OT_context_set_string)
bpy.types.register(WM_OT_context_set_enum)
bpy.types.register(WM_OT_context_set_value)
bpy.types.register(WM_OT_context_toggle)
bpy.types.register(WM_OT_context_toggle_enum)
bpy.types.register(WM_OT_context_cycle_enum)
bpy.types.register(WM_OT_context_cycle_int)
bpy.types.register(WM_OT_doc_view)
bpy.types.register(WM_OT_doc_edit)
bpy.types.register(WM_OT_reload_scripts)
# experemental!
import rna_prop_ui
bpy.types.register(rna_prop_ui.WM_OT_properties_edit)
bpy.types.register(rna_prop_ui.WM_OT_properties_add)
bpy.types.register(rna_prop_ui.WM_OT_properties_remove)
classes = [
MESH_OT_delete_edgeloop,
WM_OT_context_set_boolean,
WM_OT_context_set_int,
WM_OT_context_set_float,
WM_OT_context_set_string,
WM_OT_context_set_enum,
WM_OT_context_set_value,
WM_OT_context_toggle,
WM_OT_context_toggle_enum,
WM_OT_context_cycle_enum,
WM_OT_context_cycle_int,
WM_OT_doc_view,
WM_OT_doc_edit,
WM_OT_reload_scripts,
# experemental!
rna_prop_ui.WM_OT_properties_edit,
rna_prop_ui.WM_OT_properties_add,
rna_prop_ui.WM_OT_properties_remove]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -157,8 +157,19 @@ class DATA_PT_motion_paths(MotionPathButtonsPanel):
col.operator("pose.paths_clear", text="Clear Paths")
classes = [
OBJECT_PT_motion_paths,
DATA_PT_motion_paths]
#bpy.types.register(OBJECT_PT_onion_skinning)
#bpy.types.register(DATA_PT_onion_skinning)
bpy.types.register(OBJECT_PT_motion_paths)
bpy.types.register(DATA_PT_motion_paths)
# OBJECT_PT_onion_skinning
# DATA_PT_onion_skinning
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -253,12 +253,22 @@ class DATA_PT_iksolver_itasc(DataButtonsPanel):
row.prop(itasc, "dampmax", text="Damp", slider=True)
row.prop(itasc, "dampeps", text="Eps", slider=True)
classes = [
DATA_PT_context_arm,
DATA_PT_skeleton,
DATA_PT_display,
DATA_PT_bone_groups,
DATA_PT_ghost,
DATA_PT_iksolver_itasc,
bpy.types.register(DATA_PT_context_arm)
bpy.types.register(DATA_PT_skeleton)
bpy.types.register(DATA_PT_display)
bpy.types.register(DATA_PT_bone_groups)
bpy.types.register(DATA_PT_ghost)
bpy.types.register(DATA_PT_iksolver_itasc)
DATA_PT_custom_props_arm]
bpy.types.register(DATA_PT_custom_props_arm)
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -327,24 +327,37 @@ class INFO_MT_armature_metarig_add(bpy.types.Menu):
text = bpy.utils.display_name(submodule_type)
layout.operator("pose.metarig_sample_add", text=text, icon='OUTLINER_OB_ARMATURE').metarig_type = submodule_type
bpy.types.register(DATA_PT_template)
classes = [
DATA_PT_template,
bpy.types.register(PoseTemplateSettings)
bpy.types.register(PoseTemplate)
PoseTemplateSettings,
PoseTemplate,
bpy.types.register(Reload)
bpy.types.register(Generate)
bpy.types.register(Validate)
bpy.types.register(Sample)
bpy.types.register(Graph)
bpy.types.register(AsScript)
Reload,
Generate,
Validate,
Sample,
Graph,
AsScript,
bpy.types.register(ActiveAssign)
bpy.types.register(ActiveClear)
ActiveAssign,
ActiveClear,
INFO_MT_armature_metarig_add]
bpy.types.register(INFO_MT_armature_metarig_add)
import space_info
menu_func = (lambda self, context: self.layout.menu("INFO_MT_armature_metarig_add", icon='OUTLINER_OB_ARMATURE'))
space_info.INFO_MT_armature_add.append(menu_func)
import space_info # ensure the menu is loaded first
def register():
register = bpy.types.register
for cls in classes:
register(cls)
space_info.INFO_MT_armature_add.append(menu_func)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)
bpy.types.INFO_MT_armature_add.remove(menu_func)

View File

@@ -387,13 +387,23 @@ class BONE_PT_deform(BoneButtonsPanel):
col.label(text="Offset:")
col.prop(bone, "cyclic_offset")
classes = [
BONE_PT_context_bone,
BONE_PT_transform,
BONE_PT_transform_locks,
BONE_PT_relations,
BONE_PT_display,
BONE_PT_inverse_kinematics,
BONE_PT_deform,
bpy.types.register(BONE_PT_context_bone)
bpy.types.register(BONE_PT_transform)
bpy.types.register(BONE_PT_transform_locks)
bpy.types.register(BONE_PT_relations)
bpy.types.register(BONE_PT_display)
bpy.types.register(BONE_PT_inverse_kinematics)
bpy.types.register(BONE_PT_deform)
BONE_PT_custom_props]
bpy.types.register(BONE_PT_custom_props)
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -150,8 +150,20 @@ class DATA_PT_camera_display(DataButtonsPanel):
sub.prop(cam, "passepartout_alpha", text="Alpha", slider=True)
bpy.types.register(DATA_PT_context_camera)
bpy.types.register(DATA_PT_camera)
bpy.types.register(DATA_PT_camera_display)
classes = [
DATA_PT_context_camera,
DATA_PT_camera,
DATA_PT_camera_display,
bpy.types.register(DATA_PT_custom_props_camera)
DATA_PT_custom_props_camera]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -383,13 +383,25 @@ class DATA_PT_textboxes(DataButtonsPanel):
col.prop(box, "y", text="Y")
bpy.types.register(DATA_PT_context_curve)
bpy.types.register(DATA_PT_shape_curve)
bpy.types.register(DATA_PT_geometry_curve)
bpy.types.register(DATA_PT_pathanim)
bpy.types.register(DATA_PT_active_spline)
bpy.types.register(DATA_PT_font)
bpy.types.register(DATA_PT_paragraph)
bpy.types.register(DATA_PT_textboxes)
classes = [
DATA_PT_context_curve,
DATA_PT_shape_curve,
DATA_PT_geometry_curve,
DATA_PT_pathanim,
DATA_PT_active_spline,
DATA_PT_font,
DATA_PT_paragraph,
DATA_PT_textboxes,
bpy.types.register(DATA_PT_custom_props_curve)
DATA_PT_custom_props_curve]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -47,4 +47,16 @@ class DATA_PT_empty(DataButtonsPanel):
layout.prop(ob, "empty_draw_size", text="Size")
bpy.types.register(DATA_PT_empty)
classes = [
DATA_PT_empty]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -391,15 +391,27 @@ class DATA_PT_falloff_curve(DataButtonsPanel):
self.layout.template_curve_mapping(lamp, "falloff_curve")
bpy.types.register(LAMP_MT_sunsky_presets)
classes = [
LAMP_MT_sunsky_presets,
bpy.types.register(DATA_PT_context_lamp)
bpy.types.register(DATA_PT_preview)
bpy.types.register(DATA_PT_lamp)
bpy.types.register(DATA_PT_falloff_curve)
bpy.types.register(DATA_PT_area)
bpy.types.register(DATA_PT_spot)
bpy.types.register(DATA_PT_shadow)
bpy.types.register(DATA_PT_sunsky)
DATA_PT_context_lamp,
DATA_PT_preview,
DATA_PT_lamp,
DATA_PT_falloff_curve,
DATA_PT_area,
DATA_PT_spot,
DATA_PT_shadow,
DATA_PT_sunsky,
bpy.types.register(DATA_PT_custom_props_lamp)
DATA_PT_custom_props_lamp]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -96,7 +96,19 @@ class DATA_PT_lattice(DataButtonsPanel):
layout.prop(lat, "outside")
bpy.types.register(DATA_PT_context_lattice)
bpy.types.register(DATA_PT_lattice)
classes = [
DATA_PT_context_lattice,
DATA_PT_lattice,
bpy.types.register(DATA_PT_custom_props_lattice)
DATA_PT_custom_props_lattice]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -304,15 +304,28 @@ class DATA_PT_vertex_colors(DataButtonsPanel):
if lay:
layout.prop(lay, "name")
bpy.types.register(MESH_MT_vertex_group_specials)
bpy.types.register(MESH_MT_shape_key_specials)
bpy.types.register(DATA_PT_context_mesh)
bpy.types.register(DATA_PT_normals)
bpy.types.register(DATA_PT_settings)
bpy.types.register(DATA_PT_vertex_groups)
bpy.types.register(DATA_PT_shape_keys)
bpy.types.register(DATA_PT_uv_texture)
bpy.types.register(DATA_PT_vertex_colors)
classes = [
MESH_MT_vertex_group_specials,
MESH_MT_shape_key_specials,
bpy.types.register(DATA_PT_custom_props_mesh)
DATA_PT_context_mesh,
DATA_PT_normals,
DATA_PT_settings,
DATA_PT_vertex_groups,
DATA_PT_shape_keys,
DATA_PT_uv_texture,
DATA_PT_vertex_colors,
DATA_PT_custom_props_mesh]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -135,8 +135,21 @@ class DATA_PT_metaball_element(DataButtonsPanel):
col.prop(metaelem, "size_x", text="X")
col.prop(metaelem, "size_y", text="Y")
bpy.types.register(DATA_PT_context_metaball)
bpy.types.register(DATA_PT_metaball)
bpy.types.register(DATA_PT_metaball_element)
bpy.types.register(DATA_PT_custom_props_metaball)
classes = [
DATA_PT_context_metaball,
DATA_PT_metaball,
DATA_PT_metaball_element,
DATA_PT_custom_props_metaball]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -729,4 +729,17 @@ class DATA_PT_modifiers(DataButtonsPanel):
col.prop(md, "width", slider=True)
col.prop(md, "narrowness", slider=True)
bpy.types.register(DATA_PT_modifiers)
classes = [
DATA_PT_modifiers]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -196,10 +196,6 @@ class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel):
col.prop(game, "collision_compound", text="Compound")
bpy.types.register(PHYSICS_PT_game_physics)
bpy.types.register(PHYSICS_PT_game_collision_bounds)
class RenderButtonsPanel(bpy.types.Panel):
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
@@ -386,13 +382,6 @@ class RENDER_PT_game_sound(RenderButtonsPanel):
layout.prop(scene, "speed_of_sound", text="Speed")
layout.prop(scene, "doppler_factor")
bpy.types.register(RENDER_PT_game)
bpy.types.register(RENDER_PT_game_player)
bpy.types.register(RENDER_PT_game_stereo)
bpy.types.register(RENDER_PT_game_shading)
bpy.types.register(RENDER_PT_game_performance)
bpy.types.register(RENDER_PT_game_sound)
class WorldButtonsPanel(bpy.types.Panel):
bl_space_type = 'PROPERTIES'
@@ -521,7 +510,30 @@ class WORLD_PT_game_physics(WorldButtonsPanel):
col.label(text="Logic Steps:")
col.prop(gs, "logic_step_max", text="Max")
bpy.types.register(WORLD_PT_game_context_world)
bpy.types.register(WORLD_PT_game_world)
bpy.types.register(WORLD_PT_game_mist)
bpy.types.register(WORLD_PT_game_physics)
classes = [
PHYSICS_PT_game_physics,
PHYSICS_PT_game_collision_bounds,
RENDER_PT_game,
RENDER_PT_game_player,
RENDER_PT_game_stereo,
RENDER_PT_game_shading,
RENDER_PT_game_performance,
RENDER_PT_game_sound,
WORLD_PT_game_context_world,
WORLD_PT_game_world,
WORLD_PT_game_mist,
WORLD_PT_game_physics]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -773,22 +773,6 @@ class MATERIAL_PT_flare(MaterialButtonsPanel):
col.prop(halo, "flares_sub", text="Subflares")
col.prop(halo, "flare_subsize", text="Subsize")
bpy.types.register(MATERIAL_PT_context_material)
bpy.types.register(MATERIAL_PT_preview)
bpy.types.register(MATERIAL_PT_diffuse)
bpy.types.register(MATERIAL_PT_specular)
bpy.types.register(MATERIAL_PT_shading)
bpy.types.register(MATERIAL_PT_transp)
bpy.types.register(MATERIAL_PT_mirror)
bpy.types.register(MATERIAL_PT_sss)
bpy.types.register(MATERIAL_PT_halo)
bpy.types.register(MATERIAL_PT_flare)
bpy.types.register(MATERIAL_PT_physics)
bpy.types.register(MATERIAL_PT_strand)
bpy.types.register(MATERIAL_PT_options)
bpy.types.register(MATERIAL_PT_shadow)
bpy.types.register(MATERIAL_PT_transp_game)
class VolumeButtonsPanel(bpy.types.Panel):
bl_space_type = 'PROPERTIES'
@@ -927,14 +911,43 @@ class MATERIAL_PT_volume_integration(VolumeButtonsPanel):
col.label()
col.prop(vol, "depth_cutoff")
bpy.types.register(MATERIAL_MT_sss_presets)
bpy.types.register(MATERIAL_MT_specials)
bpy.types.register(MATERIAL_PT_volume_density)
bpy.types.register(MATERIAL_PT_volume_shading)
bpy.types.register(MATERIAL_PT_volume_lighting)
bpy.types.register(MATERIAL_PT_volume_transp)
classes = [
MATERIAL_PT_context_material,
MATERIAL_PT_preview,
MATERIAL_PT_diffuse,
MATERIAL_PT_specular,
MATERIAL_PT_shading,
MATERIAL_PT_transp,
MATERIAL_PT_mirror,
MATERIAL_PT_sss,
MATERIAL_PT_halo,
MATERIAL_PT_flare,
MATERIAL_PT_physics,
MATERIAL_PT_strand,
MATERIAL_PT_options,
MATERIAL_PT_shadow,
MATERIAL_PT_transp_game,
bpy.types.register(MATERIAL_PT_volume_integration)
MATERIAL_MT_sss_presets,
MATERIAL_MT_specials,
bpy.types.register(MATERIAL_PT_custom_props)
MATERIAL_PT_volume_density,
MATERIAL_PT_volume_shading,
MATERIAL_PT_volume_lighting,
MATERIAL_PT_volume_transp,
MATERIAL_PT_volume_integration,
MATERIAL_PT_custom_props]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -305,13 +305,25 @@ class OBJECT_PT_animation(ObjectButtonsPanel):
row.active = (ob.parent is not None)
bpy.types.register(OBJECT_PT_context_object)
bpy.types.register(OBJECT_PT_transform)
bpy.types.register(OBJECT_PT_transform_locks)
bpy.types.register(OBJECT_PT_relations)
bpy.types.register(OBJECT_PT_groups)
bpy.types.register(OBJECT_PT_display)
bpy.types.register(OBJECT_PT_duplication)
bpy.types.register(OBJECT_PT_animation)
classes = [
OBJECT_PT_context_object,
OBJECT_PT_transform,
OBJECT_PT_transform_locks,
OBJECT_PT_relations,
OBJECT_PT_groups,
OBJECT_PT_display,
OBJECT_PT_duplication,
OBJECT_PT_animation,
bpy.types.register(OBJECT_PT_custom_props)
OBJECT_PT_custom_props]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -754,5 +754,18 @@ class BONE_PT_constraints(ConstraintButtonsPanel):
for con in context.pose_bone.constraints:
self.draw_constraint(context, con)
bpy.types.register(OBJECT_PT_constraints)
bpy.types.register(BONE_PT_constraints)
classes = [
OBJECT_PT_constraints,
BONE_PT_constraints]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -998,19 +998,32 @@ class PARTICLE_PT_vertexgroups(ParticleButtonsPanel):
row.prop_object(psys, "vertex_group_field", ob, "vertex_groups", text="Field")
row.prop(psys, "vertex_group_field_negate", text="")
bpy.types.register(PARTICLE_PT_context_particles)
bpy.types.register(PARTICLE_PT_hair_dynamics)
bpy.types.register(PARTICLE_PT_cache)
bpy.types.register(PARTICLE_PT_emission)
bpy.types.register(PARTICLE_PT_velocity)
bpy.types.register(PARTICLE_PT_rotation)
bpy.types.register(PARTICLE_PT_physics)
bpy.types.register(PARTICLE_PT_boidbrain)
bpy.types.register(PARTICLE_PT_render)
bpy.types.register(PARTICLE_PT_draw)
bpy.types.register(PARTICLE_PT_children)
bpy.types.register(PARTICLE_PT_field_weights)
bpy.types.register(PARTICLE_PT_force_fields)
bpy.types.register(PARTICLE_PT_vertexgroups)
bpy.types.register(PARTICLE_PT_custom_props)
classes = [
PARTICLE_PT_context_particles,
PARTICLE_PT_hair_dynamics,
PARTICLE_PT_cache,
PARTICLE_PT_emission,
PARTICLE_PT_velocity,
PARTICLE_PT_rotation,
PARTICLE_PT_physics,
PARTICLE_PT_boidbrain,
PARTICLE_PT_render,
PARTICLE_PT_draw,
PARTICLE_PT_children,
PARTICLE_PT_field_weights,
PARTICLE_PT_force_fields,
PARTICLE_PT_vertexgroups,
PARTICLE_PT_custom_props]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -228,10 +228,23 @@ class PHYSICS_PT_cloth_field_weights(PhysicButtonsPanel):
cloth = context.cloth.settings
effector_weights_ui(self, context, cloth.effector_weights)
bpy.types.register(CLOTH_MT_presets)
bpy.types.register(PHYSICS_PT_cloth)
bpy.types.register(PHYSICS_PT_cloth_cache)
bpy.types.register(PHYSICS_PT_cloth_collision)
bpy.types.register(PHYSICS_PT_cloth_stiffness)
bpy.types.register(PHYSICS_PT_cloth_field_weights)
classes = [
CLOTH_MT_presets,
PHYSICS_PT_cloth,
PHYSICS_PT_cloth_cache,
PHYSICS_PT_cloth_collision,
PHYSICS_PT_cloth_stiffness,
PHYSICS_PT_cloth_field_weights]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -210,3 +210,10 @@ def basic_force_field_falloff_ui(self, context, field):
sub = col.column()
sub.active = field.use_max_distance
sub.prop(field, "maximum_distance", text="Distance")
def register():
pass
def unregister():
pass

View File

@@ -242,5 +242,18 @@ class PHYSICS_PT_collision(PhysicButtonsPanel):
col.label(text="Force Fields:")
col.prop(settings, "absorption", text="Absorption")
bpy.types.register(PHYSICS_PT_field)
bpy.types.register(PHYSICS_PT_collision)
classes = [
PHYSICS_PT_field,
PHYSICS_PT_collision]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -291,7 +291,20 @@ class PHYSICS_PT_domain_particles(PhysicButtonsPanel):
col.prop(fluid, "tracer_particles")
col.prop(fluid, "generate_particles")
bpy.types.register(PHYSICS_PT_fluid)
bpy.types.register(PHYSICS_PT_domain_gravity)
bpy.types.register(PHYSICS_PT_domain_boundary)
bpy.types.register(PHYSICS_PT_domain_particles)
classes = [
PHYSICS_PT_fluid,
PHYSICS_PT_domain_gravity,
PHYSICS_PT_domain_boundary,
PHYSICS_PT_domain_particles]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -238,9 +238,22 @@ class PHYSICS_PT_smoke_field_weights(PhysicButtonsPanel):
domain = context.smoke.domain_settings
effector_weights_ui(self, context, domain.effector_weights)
bpy.types.register(PHYSICS_PT_smoke)
bpy.types.register(PHYSICS_PT_smoke_field_weights)
bpy.types.register(PHYSICS_PT_smoke_cache)
bpy.types.register(PHYSICS_PT_smoke_highres)
bpy.types.register(PHYSICS_PT_smoke_groups)
bpy.types.register(PHYSICS_PT_smoke_cache_highres)
classes = [
PHYSICS_PT_smoke,
PHYSICS_PT_smoke_field_weights,
PHYSICS_PT_smoke_cache,
PHYSICS_PT_smoke_highres,
PHYSICS_PT_smoke_groups,
PHYSICS_PT_smoke_cache_highres]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -280,10 +280,23 @@ class PHYSICS_PT_softbody_field_weights(PhysicButtonsPanel):
effector_weights_ui(self, context, softbody.effector_weights)
bpy.types.register(PHYSICS_PT_softbody)
bpy.types.register(PHYSICS_PT_softbody_cache)
bpy.types.register(PHYSICS_PT_softbody_goal)
bpy.types.register(PHYSICS_PT_softbody_edge)
bpy.types.register(PHYSICS_PT_softbody_collision)
bpy.types.register(PHYSICS_PT_softbody_solver)
bpy.types.register(PHYSICS_PT_softbody_field_weights)
classes = [
PHYSICS_PT_softbody,
PHYSICS_PT_softbody_cache,
PHYSICS_PT_softbody_goal,
PHYSICS_PT_softbody_edge,
PHYSICS_PT_softbody_collision,
PHYSICS_PT_softbody_solver,
PHYSICS_PT_softbody_field_weights]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -624,16 +624,28 @@ class RENDER_PT_bake(RenderButtonsPanel):
sub.prop(rd, "bake_bias")
bpy.types.register(RENDER_MT_presets)
bpy.types.register(RENDER_PT_render)
bpy.types.register(RENDER_PT_layers)
bpy.types.register(RENDER_PT_dimensions)
bpy.types.register(RENDER_PT_antialiasing)
bpy.types.register(RENDER_PT_motion_blur)
bpy.types.register(RENDER_PT_shading)
bpy.types.register(RENDER_PT_output)
bpy.types.register(RENDER_PT_encoding)
bpy.types.register(RENDER_PT_performance)
bpy.types.register(RENDER_PT_post_processing)
bpy.types.register(RENDER_PT_stamp)
bpy.types.register(RENDER_PT_bake)
classes = [
RENDER_MT_presets,
RENDER_PT_render,
RENDER_PT_layers,
RENDER_PT_dimensions,
RENDER_PT_antialiasing,
RENDER_PT_motion_blur,
RENDER_PT_shading,
RENDER_PT_output,
RENDER_PT_encoding,
RENDER_PT_performance,
RENDER_PT_post_processing,
RENDER_PT_stamp,
RENDER_PT_bake]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -215,22 +215,11 @@ class SCENE_PT_simplify(SceneButtonsPanel):
col = split.column()
col.prop(rd, "simplify_shadow_samples", text="Shadow Samples")
col.prop(rd, "simplify_ao_sss", text="AO and SSS")
bpy.types.register(SCENE_PT_scene)
bpy.types.register(SCENE_PT_unit)
bpy.types.register(SCENE_PT_keying_sets)
bpy.types.register(SCENE_PT_keying_set_paths)
bpy.types.register(SCENE_PT_physics)
bpy.types.register(SCENE_PT_simplify)
bpy.types.register(SCENE_PT_custom_props)
################################
from bpy.props import *
class ANIM_OT_keying_set_export(bpy.types.Operator):
"Export Keying Set to a python script."
bl_idname = "anim.keying_set_export"
@@ -340,4 +329,17 @@ class ANIM_OT_keying_set_export(bpy.types.Operator):
wm.add_fileselect(self)
return {'RUNNING_MODAL'}
bpy.types.register(ANIM_OT_keying_set_export)
classes = [
ANIM_OT_keying_set_export]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -956,29 +956,42 @@ class TEXTURE_PT_pointdensity_turbulence(TextureButtonsPanel):
col.prop(pd, "turbulence_depth")
col.prop(pd, "turbulence_strength")
bpy.types.register(TEXTURE_PT_context_texture)
bpy.types.register(TEXTURE_PT_preview)
bpy.types.register(TEXTURE_PT_clouds) # Texture Type Panels
bpy.types.register(TEXTURE_PT_wood)
bpy.types.register(TEXTURE_PT_marble)
bpy.types.register(TEXTURE_PT_magic)
bpy.types.register(TEXTURE_PT_blend)
bpy.types.register(TEXTURE_PT_stucci)
bpy.types.register(TEXTURE_PT_image)
bpy.types.register(TEXTURE_PT_image_sampling)
bpy.types.register(TEXTURE_PT_image_mapping)
bpy.types.register(TEXTURE_PT_plugin)
bpy.types.register(TEXTURE_PT_envmap)
bpy.types.register(TEXTURE_PT_musgrave)
bpy.types.register(TEXTURE_PT_voronoi)
bpy.types.register(TEXTURE_PT_distortednoise)
bpy.types.register(TEXTURE_PT_voxeldata)
bpy.types.register(TEXTURE_PT_pointdensity)
bpy.types.register(TEXTURE_PT_pointdensity_turbulence)
classes = [
TEXTURE_PT_context_texture,
TEXTURE_PT_preview,
bpy.types.register(TEXTURE_PT_colors)
bpy.types.register(TEXTURE_PT_mapping)
bpy.types.register(TEXTURE_PT_influence)
TEXTURE_PT_clouds, # Texture Type Panels
TEXTURE_PT_wood,
TEXTURE_PT_marble,
TEXTURE_PT_magic,
TEXTURE_PT_blend,
TEXTURE_PT_stucci,
TEXTURE_PT_image,
TEXTURE_PT_image_sampling,
TEXTURE_PT_image_mapping,
TEXTURE_PT_plugin,
TEXTURE_PT_envmap,
TEXTURE_PT_musgrave,
TEXTURE_PT_voronoi,
TEXTURE_PT_distortednoise,
TEXTURE_PT_voxeldata,
TEXTURE_PT_pointdensity,
TEXTURE_PT_pointdensity_turbulence,
bpy.types.register(TEXTURE_PT_custom_props)
TEXTURE_PT_colors,
TEXTURE_PT_mapping,
TEXTURE_PT_influence,
TEXTURE_PT_custom_props]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -267,14 +267,27 @@ class WORLD_PT_gather(WorldButtonsPanel):
col.prop(light, "pixel_cache")
col.prop(light, "correction")
bpy.types.register(WORLD_PT_context_world)
bpy.types.register(WORLD_PT_preview)
bpy.types.register(WORLD_PT_world)
bpy.types.register(WORLD_PT_ambient_occlusion)
bpy.types.register(WORLD_PT_environment_lighting)
bpy.types.register(WORLD_PT_indirect_lighting)
bpy.types.register(WORLD_PT_gather)
bpy.types.register(WORLD_PT_mist)
bpy.types.register(WORLD_PT_stars)
bpy.types.register(WORLD_PT_custom_props)
classes = [
WORLD_PT_context_world,
WORLD_PT_preview,
WORLD_PT_world,
WORLD_PT_ambient_occlusion,
WORLD_PT_environment_lighting,
WORLD_PT_indirect_lighting,
WORLD_PT_gather,
WORLD_PT_mist,
WORLD_PT_stars,
WORLD_PT_custom_props]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -51,5 +51,18 @@ class Buttons_MT_view(bpy.types.Menu):
col = layout.column()
col.prop(so, "panel_alignment", expand=True)
bpy.types.register(Buttons_HT_header)
bpy.types.register(Buttons_MT_view)
classes = [
Buttons_HT_header,
Buttons_MT_view]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -198,15 +198,27 @@ class ConsoleLanguage(bpy.types.Operator):
return {'FINISHED'}
bpy.types.register(CONSOLE_HT_header)
bpy.types.register(CONSOLE_MT_console)
bpy.types.register(CONSOLE_MT_report)
bpy.types.register(CONSOLE_MT_language)
classes = [
CONSOLE_HT_header,
CONSOLE_MT_console,
CONSOLE_MT_report,
CONSOLE_MT_language,
# Stubs that call the language operators
bpy.types.register(ConsoleExec)
bpy.types.register(ConsoleAutocomplete)
bpy.types.register(ConsoleBanner)
# Stubs that call the language operators
ConsoleExec,
ConsoleAutocomplete,
ConsoleBanner,
# Set the language and call the banner
bpy.types.register(ConsoleLanguage)
# Set the language and call the banner
ConsoleLanguage]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -191,9 +191,21 @@ class DOPESHEET_MT_key_transform(bpy.types.Menu):
layout.operator("transform.resize", text="Scale")
bpy.types.register(DOPESHEET_HT_header) # header/menu classes
bpy.types.register(DOPESHEET_MT_view)
bpy.types.register(DOPESHEET_MT_select)
bpy.types.register(DOPESHEET_MT_channel)
bpy.types.register(DOPESHEET_MT_key)
bpy.types.register(DOPESHEET_MT_key_transform)
classes = [
DOPESHEET_HT_header, # header/menu classes
DOPESHEET_MT_view,
DOPESHEET_MT_select,
DOPESHEET_MT_channel,
DOPESHEET_MT_key,
DOPESHEET_MT_key_transform]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -64,4 +64,17 @@ class FILEBROWSER_HT_header(bpy.types.Header):
row.prop(params, "filter_sound", text="")
row.prop(params, "filter_text", text="")
bpy.types.register(FILEBROWSER_HT_header)
classes = [
FILEBROWSER_HT_header]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -198,9 +198,21 @@ class GRAPH_MT_key_transform(bpy.types.Menu):
layout.operator("transform.resize", text="Scale")
bpy.types.register(GRAPH_HT_header) # header/menu classes
bpy.types.register(GRAPH_MT_view)
bpy.types.register(GRAPH_MT_select)
bpy.types.register(GRAPH_MT_channel)
bpy.types.register(GRAPH_MT_key)
bpy.types.register(GRAPH_MT_key_transform)
classes = [
GRAPH_HT_header, # header/menu classes
GRAPH_MT_view,
GRAPH_MT_select,
GRAPH_MT_channel,
GRAPH_MT_key,
GRAPH_MT_key_transform]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -570,20 +570,33 @@ class IMAGE_PT_paint_curve(bpy.types.Panel):
layout.template_curve_mapping(brush, "curve")
layout.operator_menu_enum("brush.curve_preset", property="shape")
bpy.types.register(IMAGE_MT_view)
bpy.types.register(IMAGE_MT_select)
bpy.types.register(IMAGE_MT_image)
bpy.types.register(IMAGE_MT_uvs_showhide)
bpy.types.register(IMAGE_MT_uvs_transform)
bpy.types.register(IMAGE_MT_uvs_snap)
bpy.types.register(IMAGE_MT_uvs_mirror)
bpy.types.register(IMAGE_MT_uvs_weldalign)
bpy.types.register(IMAGE_MT_uvs)
bpy.types.register(IMAGE_HT_header)
bpy.types.register(IMAGE_PT_image_properties)
bpy.types.register(IMAGE_PT_paint)
bpy.types.register(IMAGE_PT_paint_stroke)
bpy.types.register(IMAGE_PT_paint_curve)
bpy.types.register(IMAGE_PT_game_properties)
bpy.types.register(IMAGE_PT_view_properties)
bpy.types.register(IMAGE_PT_view_histogram)
classes = [
IMAGE_MT_view,
IMAGE_MT_select,
IMAGE_MT_image,
IMAGE_MT_uvs_showhide,
IMAGE_MT_uvs_transform,
IMAGE_MT_uvs_snap,
IMAGE_MT_uvs_mirror,
IMAGE_MT_uvs_weldalign,
IMAGE_MT_uvs,
IMAGE_HT_header,
IMAGE_PT_image_properties,
IMAGE_PT_paint,
IMAGE_PT_paint_stroke,
IMAGE_PT_paint_curve,
IMAGE_PT_game_properties,
IMAGE_PT_view_properties,
IMAGE_PT_view_histogram]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -293,18 +293,6 @@ class INFO_MT_help(bpy.types.Menu):
layout.operator("help.python_api", icon='URL')
layout.operator("help.operator_cheat_sheet")
bpy.types.register(INFO_HT_header)
bpy.types.register(INFO_MT_file)
bpy.types.register(INFO_MT_file_open_recent)
bpy.types.register(INFO_MT_file_import)
bpy.types.register(INFO_MT_file_export)
bpy.types.register(INFO_MT_file_external_data)
bpy.types.register(INFO_MT_add)
bpy.types.register(INFO_MT_mesh_add)
bpy.types.register(INFO_MT_armature_add)
bpy.types.register(INFO_MT_game)
bpy.types.register(INFO_MT_render)
bpy.types.register(INFO_MT_help)
# Help operators
@@ -397,12 +385,38 @@ class HELP_OT_operator_cheat_sheet(bpy.types.Operator):
self.report({'INFO'}, "See OperatorList.txt textblock")
return {'FINISHED'}
bpy.types.register(HELP_OT_manual)
bpy.types.register(HELP_OT_release_logs)
bpy.types.register(HELP_OT_blender_website)
bpy.types.register(HELP_OT_blender_eshop)
bpy.types.register(HELP_OT_developer_community)
bpy.types.register(HELP_OT_user_community)
bpy.types.register(HELP_OT_report_bug)
bpy.types.register(HELP_OT_python_api)
bpy.types.register(HELP_OT_operator_cheat_sheet)
classes = [
INFO_HT_header,
INFO_MT_file,
INFO_MT_file_open_recent,
INFO_MT_file_import,
INFO_MT_file_export,
INFO_MT_file_external_data,
INFO_MT_add,
INFO_MT_mesh_add,
INFO_MT_armature_add,
INFO_MT_game,
INFO_MT_render,
INFO_MT_help,
HELP_OT_manual,
HELP_OT_release_logs,
HELP_OT_blender_website,
HELP_OT_blender_eshop,
HELP_OT_developer_community,
HELP_OT_user_community,
HELP_OT_report_bug,
HELP_OT_python_api,
HELP_OT_operator_cheat_sheet]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -46,4 +46,17 @@ class LOGIC_PT_properties(bpy.types.Panel):
row.prop(prop, "debug", text="", toggle=True, icon='INFO')
row.operator("object.game_property_remove", text="", icon='X').index = i
bpy.types.register(LOGIC_PT_properties)
classes = [
LOGIC_PT_properties]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -159,9 +159,21 @@ class NLA_MT_edit_transform(bpy.types.Menu):
layout.operator("transform.resize", text="Scale")
bpy.types.register(NLA_HT_header) # header/menu classes
bpy.types.register(NLA_MT_view)
bpy.types.register(NLA_MT_select)
bpy.types.register(NLA_MT_edit)
bpy.types.register(NLA_MT_add)
bpy.types.register(NLA_MT_edit_transform)
classes = [
NLA_HT_header, # header/menu classes
NLA_MT_view,
NLA_MT_select,
NLA_MT_edit,
NLA_MT_add,
NLA_MT_edit_transform]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -139,7 +139,20 @@ class NODE_MT_node(bpy.types.Menu):
layout.operator("node.show_cyclic_dependencies")
bpy.types.register(NODE_HT_header)
bpy.types.register(NODE_MT_view)
bpy.types.register(NODE_MT_select)
bpy.types.register(NODE_MT_node)
classes = [
NODE_HT_header,
NODE_MT_view,
NODE_MT_select,
NODE_MT_node]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -99,6 +99,19 @@ class OUTLINER_MT_edit_datablocks(bpy.types.Menu):
col.operator("outliner.drivers_add_selected")
col.operator("outliner.drivers_delete_selected")
bpy.types.register(OUTLINER_HT_header)
bpy.types.register(OUTLINER_MT_view)
bpy.types.register(OUTLINER_MT_edit_datablocks)
classes = [
OUTLINER_HT_header,
OUTLINER_MT_view,
OUTLINER_MT_edit_datablocks]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -665,21 +665,34 @@ class SEQUENCER_PT_view(SequencerButtonsPanel_Output):
col.prop(st, "draw_overexposed") # text="Zebra"
col.prop(st, "draw_safe_margin")
bpy.types.register(SEQUENCER_HT_header) # header/menu classes
bpy.types.register(SEQUENCER_MT_view)
bpy.types.register(SEQUENCER_MT_view_toggle)
bpy.types.register(SEQUENCER_MT_select)
bpy.types.register(SEQUENCER_MT_marker)
bpy.types.register(SEQUENCER_MT_add)
bpy.types.register(SEQUENCER_MT_add_effect)
bpy.types.register(SEQUENCER_MT_strip)
bpy.types.register(SEQUENCER_PT_edit) # sequencer panels
bpy.types.register(SEQUENCER_PT_effect)
bpy.types.register(SEQUENCER_PT_input)
bpy.types.register(SEQUENCER_PT_sound)
bpy.types.register(SEQUENCER_PT_scene)
bpy.types.register(SEQUENCER_PT_filter)
bpy.types.register(SEQUENCER_PT_proxy)
classes = [
SEQUENCER_HT_header, # header/menu classes
SEQUENCER_MT_view,
SEQUENCER_MT_view_toggle,
SEQUENCER_MT_select,
SEQUENCER_MT_marker,
SEQUENCER_MT_add,
SEQUENCER_MT_add_effect,
SEQUENCER_MT_strip,
bpy.types.register(SEQUENCER_PT_view) # view panels
SEQUENCER_PT_edit, # sequencer panels
SEQUENCER_PT_effect,
SEQUENCER_PT_input,
SEQUENCER_PT_sound,
SEQUENCER_PT_scene,
SEQUENCER_PT_filter,
SEQUENCER_PT_proxy,
SEQUENCER_PT_view] # view panels
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -273,14 +273,27 @@ class TEXT_MT_edit(bpy.types.Menu):
layout.menu("TEXT_MT_edit_to3d")
bpy.types.register(TEXT_HT_header)
bpy.types.register(TEXT_PT_properties)
bpy.types.register(TEXT_PT_find)
bpy.types.register(TEXT_MT_text)
bpy.types.register(TEXT_MT_templates)
bpy.types.register(TEXT_MT_format)
bpy.types.register(TEXT_MT_edit)
bpy.types.register(TEXT_MT_edit_view)
bpy.types.register(TEXT_MT_edit_select)
bpy.types.register(TEXT_MT_edit_markers)
bpy.types.register(TEXT_MT_edit_to3d)
classes = [
TEXT_HT_header,
TEXT_PT_properties,
TEXT_PT_find,
TEXT_MT_text,
TEXT_MT_templates,
TEXT_MT_format,
TEXT_MT_edit,
TEXT_MT_edit_view,
TEXT_MT_edit_select,
TEXT_MT_edit_markers,
TEXT_MT_edit_to3d]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -167,8 +167,20 @@ class TIME_MT_autokey(bpy.types.Menu):
layout.prop_enum(tools, "autokey_mode", 'ADD_REPLACE_KEYS')
layout.prop_enum(tools, "autokey_mode", 'REPLACE_KEYS')
bpy.types.register(TIME_HT_header)
bpy.types.register(TIME_MT_view)
bpy.types.register(TIME_MT_frame)
bpy.types.register(TIME_MT_autokey)
bpy.types.register(TIME_MT_playback)
classes = [
TIME_HT_header,
TIME_MT_view,
TIME_MT_frame,
TIME_MT_autokey,
TIME_MT_playback]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -1348,14 +1348,6 @@ class USERPREF_PT_input(bpy.types.Panel):
#print("runtime", time.time() - start)
bpy.types.register(USERPREF_HT_header)
bpy.types.register(USERPREF_PT_tabs)
bpy.types.register(USERPREF_PT_interface)
bpy.types.register(USERPREF_PT_theme)
bpy.types.register(USERPREF_PT_edit)
bpy.types.register(USERPREF_PT_system)
bpy.types.register(USERPREF_PT_file)
bpy.types.register(USERPREF_PT_input)
from bpy.props import *
@@ -1755,12 +1747,34 @@ class WM_OT_keyconfig_remove(bpy.types.Operator):
wm.remove_keyconfig(keyconfig)
return {'FINISHED'}
bpy.types.register(WM_OT_keyconfig_export)
bpy.types.register(WM_OT_keyconfig_import)
bpy.types.register(WM_OT_keyconfig_test)
bpy.types.register(WM_OT_keyconfig_remove)
bpy.types.register(WM_OT_keymap_edit)
bpy.types.register(WM_OT_keymap_restore)
bpy.types.register(WM_OT_keyitem_add)
bpy.types.register(WM_OT_keyitem_remove)
bpy.types.register(WM_OT_keyitem_restore)
classes = [
USERPREF_HT_header,
USERPREF_PT_tabs,
USERPREF_PT_interface,
USERPREF_PT_theme,
USERPREF_PT_edit,
USERPREF_PT_system,
USERPREF_PT_file,
USERPREF_PT_input,
WM_OT_keyconfig_export,
WM_OT_keyconfig_import,
WM_OT_keyconfig_test,
WM_OT_keyconfig_remove,
WM_OT_keymap_edit,
WM_OT_keymap_restore,
WM_OT_keyitem_add,
WM_OT_keyitem_remove,
WM_OT_keyitem_restore]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -2101,105 +2101,115 @@ class VIEW3D_PT_context_properties(bpy.types.Panel):
# Draw with no edit button
rna_prop_ui.draw(self.layout, context, member, False)
classes = [
VIEW3D_OT_edit_mesh_extrude_move, # detects constraints setup and extrude region
VIEW3D_OT_edit_mesh_extrude_individual_move,
bpy.types.register(VIEW3D_OT_edit_mesh_extrude_move) # detects constraints setup and extrude region
bpy.types.register(VIEW3D_OT_edit_mesh_extrude_individual_move)
VIEW3D_HT_header, # Header
bpy.types.register(VIEW3D_HT_header) # Header
VIEW3D_MT_view, #View Menus
VIEW3D_MT_view_navigation,
VIEW3D_MT_view_align,
VIEW3D_MT_view_align_selected,
VIEW3D_MT_view_cameras,
bpy.types.register(VIEW3D_MT_view) #View Menus
bpy.types.register(VIEW3D_MT_view_navigation)
bpy.types.register(VIEW3D_MT_view_align)
bpy.types.register(VIEW3D_MT_view_align_selected)
bpy.types.register(VIEW3D_MT_view_cameras)
VIEW3D_MT_select_object, # Select Menus
VIEW3D_MT_select_pose,
VIEW3D_MT_select_particle,
VIEW3D_MT_select_edit_mesh,
VIEW3D_MT_select_edit_curve,
VIEW3D_MT_select_edit_surface,
VIEW3D_MT_select_edit_metaball,
VIEW3D_MT_select_edit_lattice,
VIEW3D_MT_select_edit_armature,
VIEW3D_MT_select_face, # XXX todo
bpy.types.register(VIEW3D_MT_select_object) # Select Menus
bpy.types.register(VIEW3D_MT_select_pose)
bpy.types.register(VIEW3D_MT_select_particle)
bpy.types.register(VIEW3D_MT_select_edit_mesh)
bpy.types.register(VIEW3D_MT_select_edit_curve)
bpy.types.register(VIEW3D_MT_select_edit_surface)
bpy.types.register(VIEW3D_MT_select_edit_metaball)
bpy.types.register(VIEW3D_MT_select_edit_lattice)
bpy.types.register(VIEW3D_MT_select_edit_armature)
bpy.types.register(VIEW3D_MT_select_face) # XXX todo
VIEW3D_MT_transform, # Object/Edit Menus
VIEW3D_MT_mirror, # Object/Edit Menus
VIEW3D_MT_snap, # Object/Edit Menus
VIEW3D_MT_uv_map, # Edit Menus
bpy.types.register(VIEW3D_MT_transform) # Object/Edit Menus
bpy.types.register(VIEW3D_MT_mirror) # Object/Edit Menus
bpy.types.register(VIEW3D_MT_snap) # Object/Edit Menus
bpy.types.register(VIEW3D_MT_uv_map) # Edit Menus
VIEW3D_MT_object, # Object Menu
VIEW3D_MT_object_apply,
VIEW3D_MT_object_clear,
VIEW3D_MT_object_parent,
VIEW3D_MT_object_track,
VIEW3D_MT_object_group,
VIEW3D_MT_object_constraints,
VIEW3D_MT_object_showhide,
VIEW3D_MT_make_single_user,
VIEW3D_MT_make_links,
bpy.types.register(VIEW3D_MT_object) # Object Menu
bpy.types.register(VIEW3D_MT_object_apply)
bpy.types.register(VIEW3D_MT_object_clear)
bpy.types.register(VIEW3D_MT_object_parent)
bpy.types.register(VIEW3D_MT_object_track)
bpy.types.register(VIEW3D_MT_object_group)
bpy.types.register(VIEW3D_MT_object_constraints)
bpy.types.register(VIEW3D_MT_object_showhide)
bpy.types.register(VIEW3D_MT_make_single_user)
bpy.types.register(VIEW3D_MT_make_links)
VIEW3D_MT_hook,
VIEW3D_MT_vertex_group,
bpy.types.register(VIEW3D_MT_hook)
bpy.types.register(VIEW3D_MT_vertex_group)
VIEW3D_MT_sculpt, # Sculpt Menu
VIEW3D_MT_paint_vertex,
VIEW3D_MT_paint_weight,
bpy.types.register(VIEW3D_MT_sculpt) # Sculpt Menu
bpy.types.register(VIEW3D_MT_paint_vertex)
bpy.types.register(VIEW3D_MT_paint_weight)
VIEW3D_MT_particle, # Particle Menu
VIEW3D_MT_particle_specials,
VIEW3D_MT_particle_showhide,
bpy.types.register(VIEW3D_MT_particle)# Particle Menu
bpy.types.register(VIEW3D_MT_particle_specials)
bpy.types.register(VIEW3D_MT_particle_showhide)
VIEW3D_MT_pose, # POSE Menu
VIEW3D_MT_pose_transform,
VIEW3D_MT_pose_pose,
VIEW3D_MT_pose_motion,
VIEW3D_MT_pose_group,
VIEW3D_MT_pose_ik,
VIEW3D_MT_pose_constraints,
VIEW3D_MT_pose_showhide,
bpy.types.register(VIEW3D_MT_pose) # POSE Menu
bpy.types.register(VIEW3D_MT_pose_transform)
bpy.types.register(VIEW3D_MT_pose_pose)
bpy.types.register(VIEW3D_MT_pose_motion)
bpy.types.register(VIEW3D_MT_pose_group)
bpy.types.register(VIEW3D_MT_pose_ik)
bpy.types.register(VIEW3D_MT_pose_constraints)
bpy.types.register(VIEW3D_MT_pose_showhide)
VIEW3D_MT_edit_mesh,
VIEW3D_MT_edit_mesh_specials, # Only as a menu for keybindings
VIEW3D_MT_edit_mesh_selection_mode, # Only as a menu for keybindings
VIEW3D_MT_edit_mesh_vertices,
VIEW3D_MT_edit_mesh_edges,
VIEW3D_MT_edit_mesh_faces,
VIEW3D_MT_edit_mesh_normals,
VIEW3D_MT_edit_mesh_showhide,
VIEW3D_MT_edit_mesh_extrude, # use with VIEW3D_OT_edit_mesh_extrude_menu
bpy.types.register(VIEW3D_MT_edit_mesh)
bpy.types.register(VIEW3D_MT_edit_mesh_specials) # Only as a menu for keybindings
bpy.types.register(VIEW3D_MT_edit_mesh_selection_mode) # Only as a menu for keybindings
bpy.types.register(VIEW3D_MT_edit_mesh_vertices)
bpy.types.register(VIEW3D_MT_edit_mesh_edges)
bpy.types.register(VIEW3D_MT_edit_mesh_faces)
bpy.types.register(VIEW3D_MT_edit_mesh_normals)
bpy.types.register(VIEW3D_MT_edit_mesh_showhide)
bpy.types.register(VIEW3D_MT_edit_mesh_extrude) # use with VIEW3D_OT_edit_mesh_extrude_menu
VIEW3D_MT_edit_curve,
VIEW3D_MT_edit_curve_ctrlpoints,
VIEW3D_MT_edit_curve_segments,
VIEW3D_MT_edit_curve_specials,
VIEW3D_MT_edit_curve_showhide,
bpy.types.register(VIEW3D_MT_edit_curve)
bpy.types.register(VIEW3D_MT_edit_curve_ctrlpoints)
bpy.types.register(VIEW3D_MT_edit_curve_segments)
bpy.types.register(VIEW3D_MT_edit_curve_specials)
bpy.types.register(VIEW3D_MT_edit_curve_showhide)
VIEW3D_MT_edit_surface,
bpy.types.register(VIEW3D_MT_edit_surface)
VIEW3D_MT_edit_text,
VIEW3D_MT_edit_text_chars,
bpy.types.register(VIEW3D_MT_edit_text)
bpy.types.register(VIEW3D_MT_edit_text_chars)
VIEW3D_MT_edit_meta,
VIEW3D_MT_edit_meta_showhide,
bpy.types.register(VIEW3D_MT_edit_meta)
bpy.types.register(VIEW3D_MT_edit_meta_showhide)
VIEW3D_MT_edit_lattice,
bpy.types.register(VIEW3D_MT_edit_lattice)
VIEW3D_MT_edit_armature,
VIEW3D_MT_edit_armature_parent,
VIEW3D_MT_edit_armature_roll,
bpy.types.register(VIEW3D_MT_edit_armature)
bpy.types.register(VIEW3D_MT_edit_armature_parent)
bpy.types.register(VIEW3D_MT_edit_armature_roll)
VIEW3D_MT_armature_specials, # Only as a menu for keybindings
bpy.types.register(VIEW3D_MT_armature_specials) # Only as a menu for keybindings
# Panels
VIEW3D_PT_3dview_properties,
VIEW3D_PT_3dview_display,
VIEW3D_PT_3dview_name,
VIEW3D_PT_3dview_meshdisplay,
VIEW3D_PT_3dview_curvedisplay,
VIEW3D_PT_background_image,
VIEW3D_PT_transform_orientations,
VIEW3D_PT_etch_a_ton,
VIEW3D_PT_context_properties]
# Panels
bpy.types.register(VIEW3D_PT_3dview_properties)
bpy.types.register(VIEW3D_PT_3dview_display)
bpy.types.register(VIEW3D_PT_3dview_name)
bpy.types.register(VIEW3D_PT_3dview_meshdisplay)
bpy.types.register(VIEW3D_PT_3dview_curvedisplay)
bpy.types.register(VIEW3D_PT_background_image)
bpy.types.register(VIEW3D_PT_transform_orientations)
bpy.types.register(VIEW3D_PT_etch_a_ton)
bpy.types.register(VIEW3D_PT_context_properties)
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -903,28 +903,27 @@ class VIEW3D_PT_tools_projectpaint(View3DPanel):
sub = col.column()
sub.prop(ipaint, "seam_bleed")
class VIEW3D_MT_tools_projectpaint_clone(bpy.types.Menu):
bl_label = "Clone Layer"
def draw(self, context):
layout = self.layout
for i, tex in enumerate(context.active_object.data.uv_textures):
prop = layout.operator("wm.context_set_int", text=tex.name)
prop.path = "active_object.data.uv_texture_clone_index"
prop.value = i
class VIEW3D_MT_tools_projectpaint_clone(bpy.types.Menu):
bl_label = "Clone Layer"
class VIEW3D_MT_tools_projectpaint_stencil(bpy.types.Menu):
bl_label = "Mask Layer"
def draw(self, context):
layout = self.layout
for i, tex in enumerate(context.active_object.data.uv_textures):
prop = layout.operator("wm.context_set_int", text=tex.name)
prop.path = "active_object.data.uv_texture_clone_index"
prop.value = i
def draw(self, context):
layout = self.layout
for i, tex in enumerate(context.active_object.data.uv_textures):
prop = layout.operator("wm.context_set_int", text=tex.name)
prop.path = "active_object.data.uv_texture_stencil_index"
prop.value = i
bpy.types.register(VIEW3D_MT_tools_projectpaint_clone)
bpy.types.register(VIEW3D_MT_tools_projectpaint_stencil)
class VIEW3D_MT_tools_projectpaint_stencil(bpy.types.Menu):
bl_label = "Mask Layer"
def draw(self, context):
layout = self.layout
for i, tex in enumerate(context.active_object.data.uv_textures):
prop = layout.operator("wm.context_set_int", text=tex.name)
prop.path = "active_object.data.uv_texture_stencil_index"
prop.value = i
class VIEW3D_PT_tools_particlemode(View3DPanel):
@@ -990,26 +989,43 @@ class VIEW3D_PT_tools_particlemode(View3DPanel):
sub.active = pe.fade_time
sub.prop(pe, "fade_frames", slider=True)
bpy.types.register(VIEW3D_PT_tools_weightpaint)
bpy.types.register(VIEW3D_PT_tools_objectmode)
bpy.types.register(VIEW3D_PT_tools_meshedit)
bpy.types.register(VIEW3D_PT_tools_meshedit_options)
bpy.types.register(VIEW3D_PT_tools_curveedit)
bpy.types.register(VIEW3D_PT_tools_surfaceedit)
bpy.types.register(VIEW3D_PT_tools_textedit)
bpy.types.register(VIEW3D_PT_tools_armatureedit)
bpy.types.register(VIEW3D_PT_tools_armatureedit_options)
bpy.types.register(VIEW3D_PT_tools_mballedit)
bpy.types.register(VIEW3D_PT_tools_latticeedit)
bpy.types.register(VIEW3D_PT_tools_posemode)
bpy.types.register(VIEW3D_PT_tools_posemode_options)
bpy.types.register(VIEW3D_PT_tools_brush)
bpy.types.register(VIEW3D_PT_tools_brush_texture)
bpy.types.register(VIEW3D_PT_tools_brush_tool)
bpy.types.register(VIEW3D_PT_tools_brush_stroke)
bpy.types.register(VIEW3D_PT_tools_brush_curve)
bpy.types.register(VIEW3D_PT_sculpt_options)
bpy.types.register(VIEW3D_PT_tools_vertexpaint)
bpy.types.register(VIEW3D_PT_tools_weightpaint_options)
bpy.types.register(VIEW3D_PT_tools_projectpaint)
bpy.types.register(VIEW3D_PT_tools_particlemode)
classes = [
VIEW3D_PT_tools_weightpaint,
VIEW3D_PT_tools_objectmode,
VIEW3D_PT_tools_meshedit,
VIEW3D_PT_tools_meshedit_options,
VIEW3D_PT_tools_curveedit,
VIEW3D_PT_tools_surfaceedit,
VIEW3D_PT_tools_textedit,
VIEW3D_PT_tools_armatureedit,
VIEW3D_PT_tools_armatureedit_options,
VIEW3D_PT_tools_mballedit,
VIEW3D_PT_tools_latticeedit,
VIEW3D_PT_tools_posemode,
VIEW3D_PT_tools_posemode_options,
VIEW3D_PT_tools_brush,
VIEW3D_PT_tools_brush_texture,
VIEW3D_PT_tools_brush_tool,
VIEW3D_PT_tools_brush_stroke,
VIEW3D_PT_tools_brush_curve,
VIEW3D_PT_sculpt_options,
VIEW3D_PT_tools_vertexpaint,
VIEW3D_PT_tools_weightpaint_options,
VIEW3D_PT_tools_projectpaint,
VIEW3D_MT_tools_projectpaint_clone,
VIEW3D_MT_tools_projectpaint_stencil,
VIEW3D_PT_tools_particlemode]
def register():
register = bpy.types.register
for cls in classes:
register(cls)
def unregister():
unregister = bpy.types.unregister
for cls in classes:
unregister(cls)

View File

@@ -3881,7 +3881,7 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun
Py_DECREF(py_arg_count);
if (arg_count != func_arg_count) {
PyErr_Format( PyExc_AttributeError, "expected %.200s, %.200s class \"%.200s\" function to have %d args", class_type, py_class_name, RNA_function_identifier(func), func_arg_count);
PyErr_Format( PyExc_AttributeError, "expected %.200s, %.200s class \"%.200s\" function to have %d args, found %d", class_type, py_class_name, RNA_function_identifier(func), func_arg_count, arg_count);
return -1;
}
}
@@ -4165,6 +4165,11 @@ PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class)
PyObject *item;
const char *identifier= "";
if(PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "bl_rna")) {
PyErr_SetString(PyExc_AttributeError, "Alredy registered as a subclass.");
return NULL;
}
srna= pyrna_struct_as_srna(py_class);
if(srna==NULL)
return NULL;