120 lines
2.8 KiB
Python
120 lines
2.8 KiB
Python
|
|
import bpy
|
|
|
|
|
|
def get_view_3d_override():
|
|
windows = bpy.context.window_manager.windows
|
|
areas = [a for w in windows for a in w.screen.areas if a.type == 'VIEW_3D']
|
|
|
|
if not areas:
|
|
print('No view 3d found')
|
|
return
|
|
|
|
view_3d = None
|
|
for area in areas:
|
|
if area.spaces.active.camera:
|
|
view_3d = area
|
|
|
|
if not view_3d:
|
|
view_3d = max(areas, key=lambda x :x.width)
|
|
|
|
return {'area': view_3d, 'region': view_3d.regions[-1]}
|
|
|
|
def get_mat(ob):
|
|
for sl in ob.material_slots:
|
|
if sl.material:
|
|
return sl.material
|
|
|
|
def link_mat_to_object(ob):
|
|
for sl in ob.material_slots:
|
|
m = sl.material
|
|
sl.link = 'OBJECT'
|
|
sl.material = m
|
|
|
|
def find_mirror(name):
|
|
mirror = None
|
|
prop= False
|
|
|
|
if name:
|
|
|
|
if name.startswith('[')and name.endswith(']'):
|
|
prop = True
|
|
name= name[:-2][2:]
|
|
|
|
match={
|
|
'R': 'L',
|
|
'r': 'l',
|
|
'L': 'R',
|
|
'l': 'r',
|
|
}
|
|
|
|
separator=['.','_']
|
|
|
|
if name.startswith(tuple(match.keys())):
|
|
if name[1] in separator:
|
|
mirror = match[name[0]]+name[1:]
|
|
|
|
if name.endswith(tuple(match.keys())):
|
|
if name[-2] in separator:
|
|
mirror = name[:-1]+match[name[-1]]
|
|
|
|
if mirror and prop == True:
|
|
mirror='["%s"]'%mirror
|
|
|
|
return mirror
|
|
|
|
else:
|
|
return None
|
|
|
|
def hide_layers(args):
|
|
""" """
|
|
ob = bpy.context.object
|
|
|
|
layers = []
|
|
for bone in [b for b in ob.pose.bones if b.bone.select]:
|
|
for i,l in enumerate(bone.bone.layers):
|
|
if l and i not in layers:
|
|
layers.append(i)
|
|
|
|
for i in layers:
|
|
ob.data.layers[i] = not ob.data.layers[i]
|
|
|
|
def select_layer(args):
|
|
ob = bpy.context.object
|
|
|
|
layers =[]
|
|
for bone in [b for b in ob.pose.bones if b.bone.select]:
|
|
bone_layers = [i for i,l in enumerate(bone.bone.layers) if l]
|
|
|
|
for l in bone_layers:
|
|
if l not in layers:
|
|
layers.append(l)
|
|
|
|
for bone in ob.pose.bones:
|
|
bone_layers = [i for i,l in enumerate(bone.bone.layers) if l]
|
|
|
|
if len(set(bone_layers).intersection(layers)):
|
|
bone.bone.select = True
|
|
|
|
def hide_bones(args):
|
|
ob = bpy.context.object
|
|
selected_bone = [b for b in ob.pose.bones if b.bone.select]
|
|
|
|
hide = [b.bone.hide for b in selected_bone if not b.bone.hide]
|
|
|
|
visibility = True if len(hide) else False
|
|
|
|
for bone in selected_bone:
|
|
bone.bone.hide = visibility
|
|
|
|
def select_all(args):
|
|
ob = bpy.context.object
|
|
shapes = ob.data.rig_picker['shapes']
|
|
bones = [s['bone'] for s in shapes if s['shape_type']=='BONE']
|
|
|
|
for bone_name in bones:
|
|
bone = ob.pose.bones.get(bone_name)
|
|
|
|
if bone:
|
|
bone.bone.select = True
|