bl_info = { "name": "example", "author": "[email protected]", "version": (1, 0), "blender": (2, 5, 8), "api": 37702, "location": "View3D > UI > example", "description": "perhaps this is a better example.", "warning": "", "wiki_url": "", "tracker_url": "", "category": "3D View"}
import bpy
ops=[]
OPS=[]
class OpSettings(bpy.types.PropertyGroup):
n=bpy.props.IntProperty(min=2,max=99)
bpy.utils.register_class(OpSettings)
bpy.types.Object.opset=bpy.props.PointerProperty(type=OpSettings)
class Op(bpy.types.Operator):
@classmethod
def poll(self,context):return context.active_object!=None
def invoke(self,context,event):
self.ob=context.active_object
bpy.ops.object.mode_set(mode='OBJECT')
self.execute(context)
bpy.ops.object.mode_set(mode='EDIT')
return {'FINISHED'}
def execute(self,context):self.f(context)
class automagic_panel(bpy.types.Panel):
bl_label,bl_space_type,bl_region_type=['example','VIEW_3D','UI']
def draw(self,context):
self.layout.row().prop(context.active_object.opset, "n")
list(map(lambda x:self.layout.row().operator(x),ops))
def MakeOp(f):
fn='object.'+f.__name__
FN='OBJECT_OT_'+f.__name__
OP=type(FN,(Op,),{'bl_idname':fn,'bl_label':f.__name__.replace("_"," "),'f':f})
OPS.append(OP)
ops.append(fn)
return f
def sl(x):x.select=True
def nv(x):x.select=not x.select
sel=lambda x:sl(x)
inv=lambda x:nv(x)
ptp=lambda x:print(type(x))
lsm=lambda x,y:list(map(x,y))
seln=lambda x,y:lsm(sel,[x[i] for i in range(0,len(x),y)])
flipn=lambda x,y:lsm(inv,[x[i] for i in range(0,len(x),y)])
@MakeOp
def sel_n_v(op,c):
bpy.context.tool_settings.mesh_select_mode=[True,False,False]
seln(op.ob.data.vertices,op.ob.opset.n)
@MakeOp
def sel_n_e(op,c):
bpy.context.tool_settings.mesh_select_mode=[False,True,False]
seln(op.ob.data.edges,op.ob.opset.n)
@MakeOp
def sel_n_f(op,c):
bpy.context.tool_settings.mesh_select_mode=[False,False,True]
seln(op.ob.data.faces,op.ob.opset.n)
@MakeOp
def flip_n_v(op,c):
bpy.context.tool_settings.mesh_select_mode=[True,False,False]
flipn(op.ob.data.vertices,op.ob.opset.n)
@MakeOp
def flip_n_e(op,c):
bpy.context.tool_settings.mesh_select_mode=[False,True,False]
flipn(op.ob.data.edges,op.ob.opset.n)
@MakeOp
def flip_n_f(op,c):
bpy.context.tool_settings.mesh_select_mode=[False,False,True]
flipn(op.ob.data.faces,op.ob.opset.n)
registry=OPS+[automagic_panel]
def register():list(map(lambda x:bpy.utils.register_class(x),registry))
def unregister():list(map(lambda x:bpy.utils.unregister_class(x),registry))
if __name__=='__main__':register()