Пример #1
0
def arma_create_lipsync_shapekeys(shapekey_name):
    mode_set('OBJECT')
    select_all('DESELECT')
    active_object(figure_name[0])
    obj = bpy.context.object
    ops.object.transform_apply(location=True,
                                rotation=True, 
                                scale=True)
    global modif
    for mod in bpy.context.object.modifiers:
        if mod.type == 'ARMATURE':
            modif =  mod.name
            
    if bpy.app.version >= (2, 90, 0):
        ops.object.modifier_apply_as_shapekey(
        modifier=modif)
    else:
        ops.object.modifier_apply(apply_as='SHAPE',
        modifier=modif)
        
    keyname = obj.data.shape_keys.name
    key = bpy.data.shape_keys[keyname]
    keyblock = key.key_blocks[modif]
    keyblock.name = shapekey_name
            
    active_object(armature_name[0])
    ops.object.transform_apply(location=True,
                                rotation=True,
                                scale=True)
    ops.object.parent_set(type='ARMATURE_NAME')
    mode_set('POSE')
    ops.pose.user_transforms_clear()
Пример #2
0
def configure_lipsync(mode):
    sorting_objects()
    obj = bpy.context.object
    bone = obj.data.bones.active
    for ch in bone.children:
        if ch.name[:10] == 'Arrow_bone':
            driverbone = ch.name
            
    stuff = bpy.context.scene.archived[0]
    stuff.driverbonestore = driverbone
    bonename = bone.name
    select_all('SELECT')
    ops.pose.user_transforms_clear()
    obj.data.layers_protected[30] = True
    select_all('DESELECT')
    mode_set('OBJECT')
    bone_shapekey(figure_name[0], bonename)
    obj = bpy.context.object
    obj.use_shape_key_edit_mode = True
    key_blocks[bonename].name = '...' + kb_names[indx]
    if mode == 'POSE':
        mode_set('OBJECT')
        select_all('DESELECT')
        active_object(armature_name[0])
        mode_set(mode)
    elif mode == 'SCULPT':
        mode_set(mode)
    else:
        return
Пример #3
0
def apply_from_edit():
    active_object(figure_name[0])
    obj = bpy.context.object
    obj.use_shape_key_edit_mode = False
    shape_keys = obj.data.shape_keys
    key_blocks = shape_keys.key_blocks
    kb_names.clear()
    kb.clear()
    for k in key_blocks:
        kb_names.append(k.name) 
        if k.name[:3] == '...':
            kb.append(k)
            
    kb[0].name = kb[0].name[3:]
    kb_name = kb[0].name
    driver = key_blocks[kb_name].driver_add('value')
    driverbone = [db.driverbonestore for db in 
                bpy.context.scene.archived]      
    shapekeys_drivers(driver, driverbone[0])
    select_all('DESELECT')
    active_object(armature_name[0])
    obj = bpy.context.object
    mode_set('POSE')
    select_all('SELECT')
    ops.pose.transforms_clear()
    select_all('DESELECT')
    obj.data.bones.active = obj.data.bones[kb_name]
    obj.data.bones.active.select = True
    bone_layers = range(32)
    for layer in bone_layers:
        obj.data.layers[layer] = False
        obj.data.layers[1] = True 

    obj.data.layers_protected[30] = False
Пример #4
0
def mixamo_remove():
    empty_name_holders()
    sorting_armature()
    mode_set('OBJECT')
    objs = bpy.data.objects
    rig_coll = objs['rig'].users_collection[0]
    Arma_coll = objs[armature_name[0]].users_collection[0]
    GNS_coll = objs['GNSrig'].users_collection[0]
    for animdata in bpy.data.actions:
        if (animdata.name[:8] == 'Armature' 
        or animdata.name[:7] == 'Genesis'):
            animdata.use_fake_user = False
            animdata.user_clear()
            
    purge_scene()
    if Arma_coll != rig_coll:
        if GNS_coll != rig_coll:
            enable_GNSrig()
        try:
            posebones = objs['GNSrig'].pose.bones
            if posebones['hip'].constraints['Copy Transforms']:
                remove_CT_constraints()
        except:
            pass
        disable_GNSrig()
        widget_coll = bpy.data.collections['Widgets']
        widget_coll.hide_viewport = False
        del_object(armature_name[0])
        active_object('rig')
        widget_coll.hide_viewport = True
    else:
        del_object(armature_name[0])
        active_object('rig')
Пример #5
0
def remove_lip_ctrlr():
    ops =  bpy.ops
    obj = bpy.context.object
    bone = obj.data.bones.active
    posebones = obj.pose.bones
    posebone = posebones[bone.name]
    customshapename = posebone.custom_shape.name
    bonename = posebone.name
    mode_set('EDIT')
    editbones = obj.data.edit_bones
    editbone = editbones[bone.name]
    editbone.select = True
    for chld in editbone.children:
        chld.select = True

    mode_set('POSE')
    mode_set('EDIT')
    bpy.ops.armature.delete()
    mode_set('OBJECT')
    select_all('DESELECT')
    lscoll = bpy.data.collections['LS.Widget']
    lscoll.hide_viewport = False
    active_object(customshapename)
    bpy.ops.object.delete()
    lscoll.hide_viewport = True
    purge_curves()
    if not armature_name:
        sorting_objects()
    bone_shapekey(figure_name[0], bonename)
    mode_set('OBJECT')
    ops.object.shape_key_remove(all=False)
    select_all('DESELECT')
    active_object(armature_name[0])
    mode_set('POSE')
Пример #6
0
def create_lipsync_shapekeys(skname):
    mode_set('OBJECT')
    active_object(figure_name[0])
    obj = bpy.context.object
    try:
        listsk = list(obj.data.shape_keys.key_blocks)
        if listsk:
             shapekey = obj.shape_key_add(name=skname,from_mix=False)
    except AttributeError:
         shapekey = obj.shape_key_add(from_mix=False)
         shapekey = obj.shape_key_add(name=skname,from_mix=False)
Пример #7
0
def del_object(obj):
    select_all('DESELECT')
    active_object(obj)
    objs = bpy.data.objects
    if figure_name:
        objs[figure_name[0]].select_set(True)
    elif accessories:
        for a in accessories:
            objs[a].select_set(True)
    bpy.ops.object.delete()
    purge_scene()
Пример #8
0
 def execute(self, execute):
     if not figure_name:
         sorting_objects()
     objs = bpy.data.objects
     for mod in objs[figure_name[0]].modifiers:
         if (mod.type == "ARMATURE" and mod.object.name == "GNSrig"):
             if mod.show_viewport == True:
                 active_object('rig')
                 disable_GNSrig()
             else:
                 enable_GNSrig()
     return {'FINISHED'}
Пример #9
0
def disable_GNSrig():
    mode_set('OBJECT')
    select_all('DESELECT')
    objs = bpy.data.objects
    rig_coll = objs['rig'].users_collection[0]
    widgt_coll = bpy.data.collections['Widgets']
    widgt_coll.objects.link(objs['GNSrig'])
    rig_coll.objects.unlink(objs['GNSrig'])
    for meshes in objs:
        if meshes.modifiers:
            for mod in meshes.modifiers:
                if (mod.type == "ARMATURE" 
                and mod.object.name == "GNSrig"):
                    mod.show_viewport = False
                    
    active_object('rig')
Пример #10
0
def enable_GNSrig():
    objs = bpy.data.objects
    rig_collection = objs['rig'].users_collection
    GNS_collection = objs['GNSrig'].users_collection
    rig_collection[0].objects.link(objs['GNSrig'])
    GNS_collection[0].objects.unlink(objs['GNSrig'])

    for meshes in objs:
        if meshes.modifiers:
            for mod in meshes.modifiers:
                if (mod.type == "ARMATURE" 
                and mod.object.name == "GNSrig"):
                    mod.show_viewport = True
                    
    mode_set('OBJECT')
    select_all('DESELECT')
    active_object('GNSrig')
    bpy.context.object.animation_data_create()
Пример #11
0
def bone_shapekey(activeobj, bonename):
    select_all('DESELECT')
    active_object(activeobj)
    obj = bpy.context.object
    shape_keys = obj.data.shape_keys
    global key_blocks
    key_blocks = shape_keys.key_blocks
    key_blocks[bonename].driver_remove('value')
    # Get index of shape key in bpy.context
    kb_names.clear()
    kb.clear()
    mode_set('EDIT')
    for k in key_blocks:
        kb_names.append(k.name)
    global indx
    indx = deepcopy(kb_names.index(bonename))
    keyname = obj.data.shape_keys.name
    bpy.data.shape_keys[keyname].key_blocks[bonename].value = 1
    obj.active_shape_key_index = indx
Пример #12
0
def update_custom_shape():
    if not figure_name:
        sorting_objects()
    obj = bpy.context.object
    bone = obj.data.bones.active
    bonename = bone.name
    customshape = obj.pose.bones[bonename].custom_shape
    customshapebody = customshape.data.body
    if customshapebody == bonename:
        return
    customshape.data.body = bonename
    mode_set('OBJECT')
    select_all('DESELECT')
    active_object(figure_name[0])
    obj = bpy.context.object
    shape_keys = obj.data.shape_keys
    key_blocks = shape_keys.key_blocks
    key_blocks[customshapebody].name = bonename
    select_all('DESELECT')
    active_object(armature_name[0])
    mode_set('POSE')
Пример #13
0
def apply_from_pose():
    active_object(figure_name[0])
    obj = bpy.context.object
    scene = bpy.context.scene
    maintool = scene.main_tool
    armaturename = maintool.armatures
    for mod in obj.modifiers:
        if (mod.type == 'ARMATURE' 
        and mod.object.name == armaturename):
            modifname =  deepcopy(mod.name)
            
    if bpy.app.version >= (2, 90, 0):
        ops.object.modifier_apply_as_shapekey(
        modifier=modifname)
    else:
        ops.object.modifier_apply(apply_as='SHAPE',
        modifier=modifname)
    keyname = obj.data.shape_keys.name
    key = bpy.data.shape_keys[keyname]
    existingshapekey = [sk for sk in key.key_blocks 
                    if sk.name[:3] == '...']
    newshapekey =  [sk for sk in key.key_blocks 
                    if sk.name == modifname]
    newshapekey[0].value = 1
    exshapekeyname = existingshapekey[0].name
    exshapekeyindx = obj.active_shape_key_index
    ops.object.shape_key_add(from_mix=True)
    mixshapekey = obj.active_shape_key
    shapekeylength = len(key.key_blocks)
    newshapekeyindx = shapekeylength - 2
    obj.active_shape_key_index = newshapekeyindx
    ops.object.shape_key_remove()
    obj.active_shape_key_index = exshapekeyindx
    ops.object.shape_key_remove()
    mixshapekey.name = exshapekeyname
    active_object(armature_name[0])
    ops.object.parent_set(type='ARMATURE_NAME')
    select_all('DESELECT')
    apply_from_edit()
Пример #14
0
def create_lipsync():
    objs = bpy.data.objects 
    genesis = [obj.name for obj in objs 
            if obj.name[:7] == 'Genesis']
    rig = [obj.name for obj in objs 
            if obj.name == 'rig']
    gnsarma = [obj.name for obj in objs 
            if obj.name == 'GNSrig']
    scene = bpy.context.scene
    tool = scene.main_tool
    automodify = tool.auto_modify
    if not tool.armatures:
        return [ERROR, except_msg[14]] 
    if not tool.meshes:
        return [ERROR, except_msg[15]] 
    if automodify:
        if not genesis:
            return [ERROR, except_msg[16]] 
        elif not rig:
            return [ERROR, except_msg[17]]
        elif not gnsarma:
            return [ERROR, except_msg[18]]

    empty_name_holders()
    sorting_objects()
    scene = bpy.context.scene
    scene.transform_orientation_slots[0].type = 'GLOBAL'
    # Creating mesh of Bar custom shape
    snap_cursor('CENTER')
    ops.mesh.primitive_circle_add(
                                vertices=16, 
                                radius=0.25, 
                                enter_editmode=True)
    select_all('SELECT')
    ops.mesh.duplicate_move()
    ops.transform.resize(value=(0.9, 0.9, 0.9))
    select_all('DESELECT')
    mode_set('OBJECT')
    obj = bpy.context.object
    obj.name = 'Bar'
    me = obj.data
    for v1 in range(5,12):
        for v2 in range(21,28):
            me.vertices[v1].select = True
            me.vertices[v2].select = True
    mode_set('EDIT')
    ops.mesh.delete(type='VERT')
    select_all('SELECT')
    ops.mesh.edge_face_add()
    # Creating mesh for Arrow Custom Shape#
    #######################################
    mode_set('OBJECT')
    ops.mesh.primitive_plane_add(size=0.5, enter_editmode=True)
    ops.transform.resize(value=(0.1, 0.03, 1))
    select_all('DESELECT')
    mode_set('OBJECT')
    obj = bpy.context.object
    obj.name = 'Arrow'
    me = obj.data
    vert = [0,2]
    for v in vert:
        me.vertices[v].select = True
    mode_set('EDIT')
    ops.transform.translate(value=(-0.1, 0, 0))
    ops.mesh.extrude_region_move()
    ops.transform.resize(value=(1, 3, 1))
    ops.mesh.extrude_region_move(TRANSFORM_OT_translate={
                                    "value":(-0.075, 0, 0)})
    ops.mesh.merge(type='CENTER')
    select_all('DESELECT')
    mode_set('OBJECT')
    
     # Creating lip sync controller bones
    ####################################
    active_object(armature_name[0])
    objs = bpy.data.objects
    # Getting hieght of figure and bone
    global figheight
    figheight = objs[figure_name[0]].dimensions[2]
    if figheight > 2:
        pass
    else:
         figheight = 2  
    stuff = bpy.context.scene.archived.add()
    stuff.figheightstore = figheight
    mode_set('EDIT')
    arm =  bpy.context.object
    edit_bones = arm.data.edit_bones
    tailheight = {}
    for bone in edit_bones:
        tailheight[bone.tail[2]] = bone.name
        highesttail = max(tailheight)
    
    bone_layers = range(32)
    for layer in bone_layers:
        arm.data.layers[layer] = True 
        
    select_all('DESELECT')
    arrow_bone = edit_bones.new('Arrow_bone')        
    arrow_bone.select = True
    arrow_bone.length = 0.5
    bpy.ops.armature.select_more()

    # Manipulating bone scale and orientation
    arrow_bone.head[2] = highesttail
    arrow_bone.tail[2] = highesttail+1
    arrow_bone.length = figheight/20
    for layer in bone_layers:
        if layer == 1:
            arrow_bone.layers[layer] = True
        else:
            arrow_bone.layers[layer] = False
    
    ops.armature.calculate_roll(type='GLOBAL_NEG_Y')
    ops.transform.translate(value=(0.15, 0, -0.3))
    
    # Adding Text to serve as custom shape
    mode_set('OBJECT')
    ops.object.text_add()
    obj = bpy.context.object
    if bpy.app.version >= (2, 90, 0):
        ops.transform.rotate(value=-1.5708, orient_axis='X')
    else:
        ops.transform.rotate(value=1.5708, orient_axis='X')
        
    ops.transform.resize(value=(0.04, 0.04, 0.04))
    obj.display.show_shadows = False
    obj.hide_render = True
    obj.data.body = 'A-H-J'
    obj.data.fill_mode = 'NONE'  
    obj.data.offset_x = figheight/4
    # Creating Text customshape duplicates
    active_object('Text')
    duplicate_selected_text('B-M-P')
    duplicate_selected_text('C-D-E')
    duplicate_selected_text('F-V')
    duplicate_selected_text('I-R')
    duplicate_selected_text('L-Th') 
    duplicate_selected_text('Q-U-W')
    duplicate_selected_text('O-Y')
    #Creating bar bone
    active_object(armature_name[0])
    arm =  bpy.context.object
    mode_set('EDIT')
    ops.armature.duplicate_move()
    edit_bones['Arrow_bone.001'].name = "Bar_bone"
    mode_set('POSE')
    arm.pose.bones["Bar_bone"].custom_shape = bpy.data.objects["Bar"]
    mode_set('EDIT')
    #Creating text bone
    ops.armature.duplicate_move()
    edit_bones['Bar_bone.001'].name = "Text_bone"
    textbone = edit_bones['Text_bone']
    textbone.length  = figheight/42
    mode_set('POSE')
    
    #adding custom shape to bone
    arm =  bpy.context.object
    global pose_bones
    pose_bones = arm.pose.bones
    pose_arrow_bone = pose_bones["Arrow_bone"]
    pose_arrow_bone.custom_shape = bpy.data.objects["Arrow"]
    
    # Creating bone groups and assigning
    arm =  bpy.context.object
    pose_bones = arm.pose.bones
    barbone = pose_bones["Bar_bone"]
    pose_text_bone = arm.pose.bones["Text_bone"]
    lipctrl = arm.pose.bone_groups.new(name='Lips_ctrl')
    lipctrl.name = "lip_sync"
    lipctrl.color_set = 'THEME02'
    pointer_ctrl = arm.pose.bone_groups.new(name='pointer_ctrl')
    pointer_ctrl.name = "pointer_ctrl"
    pointer_ctrl.color_set = 'THEME09'
    barbone.bone_group = arm.pose.bone_groups['lip_sync']
    pose_text_bone.bone_group = arm.pose.bone_groups['lip_sync']
    pose_arrow_bone.bone_group = arm.pose.bone_groups['pointer_ctrl']
    
    # Limiting constraints
    limit_rot = pose_arrow_bone.constraints.new(type='LIMIT_ROTATION')
    limit_rot.use_limit_x = True
    limit_rot.use_limit_y = True
    limit_rot.use_limit_z = True
    limit_rot.min_z = -3.14159
    limit_rot.use_transform_limit = True
    limit_rot.owner_space = 'LOCAL'
    transform = pose_arrow_bone.constraints.new(type='TRANSFORM')
    transform.target = bpy.data.objects[armature_name[0]]
    transform.subtarget = "Text_bone"
    transform.use_motion_extrapolate = True
    transform.map_from = 'SCALE'
    transform.from_max_z_scale = 1.5
    transform.map_to = 'ROTATION'
    transform.to_max_z_rot = -3.14159
    transform.target_space = 'LOCAL'
    transform.owner_space = 'LOCAL'
    arm.data.bones["Arrow_bone"].use_deform = False
    ##############################################
    limit_scale = pose_text_bone.constraints.new(type='LIMIT_SCALE')
    limit_scale.use_min_x = True
    limit_scale.use_max_x = True
    limit_scale.use_min_y = True
    limit_scale.use_max_y = True
    limit_scale.use_min_z = True
    limit_scale.use_max_z = True
    limit_scale.owner_space = 'LOCAL'
    limit_scale.use_transform_limit = True
    limit_scale.min_x = 1
    limit_scale.max_x = 1
    limit_scale.min_y = 1
    limit_scale.max_y = 1
    limit_scale.min_z = 1
    limit_scale.max_z = 1.5
    limit_rot2 = pose_text_bone.constraints.new(type='LIMIT_ROTATION')
    limit_rot2.use_limit_x = True
    limit_rot2.use_limit_y = True
    limit_rot2.use_limit_z = True
    limit_rot2.owner_space = 'LOCAL'
        
    # Duplicating control bones
    mode_set('EDIT')
    new_bones= ('Arrow_bone', 'Bar_bone')
    for bones in new_bones:
        edit_bones[bones].parent = edit_bones['Text_bone']
        edit_bones[bones].select = True
        edit_bones[bones].hide_select = True 
    mode_set('POSE')
    mode_set('EDIT')
    times = 7
    while times:
        times -= 1
        duplicate_move = ops.armature.duplicate_move
        duplicate_move(TRANSFORM_OT_translate={"value":(0, 0, figheight/40)})
    
    # Adding custom bone and constraints targets
    mode_set('POSE')
    trg_bone = 'Text_bone'
    trg_bone2 = 'Arrow_bone'
    trg_obj = 'Text'
    flt =  0
    for bones in  pose_bones:
        while trg_bone == bones.name:
            pose_bones[trg_bone].custom_shape = bpy.data.objects[trg_obj]
            pose_bones[trg_bone2].constraints["Transformation"].subtarget = trg_bone
            flt += 0.001
            sflt = str(flt)
            if len(sflt) < 6:
                ext = sflt[1:]
            else:
                ext = sflt[1:5]
            trg_bone = trg_bone[:9] + ext
            trg_bone2 = trg_bone2[:10] + ext
            trg_obj = trg_obj[:4] + ext
            
    #Renaming Text bones              
    mode_set('EDIT')   
    lipsyncname = ['O-Y', 'Q-U-W', 'L-Th', 'I-R', 
                'F-V', 'C-D-E', 'B-M-P', 'A-H-J']
    shpkeyname = deepcopy(lipsyncname)
    lsbonename = deepcopy(lipsyncname)
    lsbname = deepcopy(lipsyncname)
    
    tbone = 'Text_bone'
    flt =  0       
    while lipsyncname:
        bname = lipsyncname[-1]
        edit_bones[tbone].name = bname
        flt += 0.001
        sflt = str(flt)
        if len(sflt) < 6:
            ext = sflt[1:]
        else:
            ext = sflt[1:5]
        tbone = tbone[:9] + ext
        lipsyncname.pop()
        
    # Moving pose bones
    ################################################
    mode_set('OBJECT')
    select_all('DESELECT')
    active_object(armature_name[0])
    arm =  bpy.context.object
    mode_set('POSE')
    select_all('SELECT')
    ops.pose.user_transforms_clear()
    
    #Create shapekeys
    scene = bpy.context.scene
    tool = scene.main_tool
    automodify = tool.auto_modify
    if automodify == True:
        lipbonecoord = [oy, quw, lth, ir, fv, cde, bmp, ahj]
        ahj.update(upd)  
        ir.update(upd)
        while shpkeyname:
            skname = shpkeyname[-1]
            lbname = lipbonecoord[-1]
            lip_bone_positioning(lbname)
            arma_create_lipsync_shapekeys(skname)
            shpkeyname.pop()             
            lipbonecoord.pop()
    else:
        while shpkeyname:
            skname = shpkeyname[-1]
            create_lipsync_shapekeys(skname)
            shpkeyname.pop()                   
    mode_set('OBJECT')
    # Adding drivers
    #####################################
    active_object(figure_name[0])
    obj = bpy.context.object
    obj.show_only_shape_key = False
    obj.use_shape_key_edit_mode = False
    shape_keys = obj.data.shape_keys
    key_blocks = shape_keys.key_blocks
    trg_bone2 = 'Arrow_bone'
    flt =  0
                
    while lsbonename:
        bname = lsbonename[-1]
        driver = key_blocks[bname].driver_add('value')
        shapekeys_drivers(driver, trg_bone2)
        flt += 0.001
        sflt = str(flt)
        if len(sflt) < 6:
            ext = sflt[1:]
        else:
            ext = sflt[1:5]
        trg_bone2 = trg_bone2[:10] + ext
        lsbonename.pop()
    
    select_all('DESELECT')
    active_object(armature_name[0])
    obj = bpy.context.object
    mode_set('POSE')
    trgbone = "Bar_bone"
    trgbone2 = "Arrow_bone"
    flt =  0
    
    while lsbname:
        bname = lsbname[-1]
        bone = obj.pose.bones[trgbone]
        sdriver = bone.driver_add('custom_shape_scale')
        driver_scripted(sdriver, bname)
        
        bone = obj.pose.bones[trgbone2]
        sdriver = bone.driver_add('custom_shape_scale')
        driver_scripted(sdriver, bname)
        flt += 0.001
        sflt = str(flt)
        if len(sflt) < 6:
            ext = sflt[1:]
        else:
            ext = sflt[1:5]
        trgbone = trgbone[:8] + ext
        trgbone2 = trgbone2[:10] + ext
        lsbname.pop()
    
    mode_set('OBJECT')    
    select_all('DESELECT')
    coll = bpy.data.collections.new('LS.Widget')
    if bpy.context.scene.collection.children:
        bpy.data.collections[0].children.link(coll)
    else:
        bpy.context.scene.collection.children.link(coll)
    coll.hide_viewport = True
    objs = bpy.data.objects
    for obj in objs:
        if obj.name == 'Bar' or obj.name =='Arrow' or obj.name[:4] == 'Text':
            obj.select_set(True)
            coll.objects.link(obj)
            ext_coll = obj.users_collection[0]
            ext_coll.objects.unlink(obj)   
    active_object(armature_name[0])
    mode_set('POSE')
    select_all('DESELECT')
    for layer in bone_layers:
        arm.data.layers[layer] = False
        arm.data.layers[1] = True 
        arm.data.layers_protected[30] = False
    return[SUCCESS]
Пример #15
0
def add_lip_ctrlr():
    if not figure_name:
        sorting_objects()
    #Getting highest bone
    mode_set('EDIT')
    select_all('DESELECT')
    obj = bpy.context.object
    editbones = obj.data.edit_bones
    figheight = [fh.figheightstore 
    for fh in bpy.context.scene.archived]
    for bone in editbones:
        bonelength = str(bone.length)
        extratedheight = str(figheight[0]/42)
        if bonelength[:5] == extratedheight[:5]:
            tailheight = {}
            tailheight[bone.tail[2]] = bone.name
            highesttail = max(tailheight) 
            highestbone = tailheight[highesttail]
    
    # Selecting highest bones and making a copy     
    mode_set('POSE')
    posebones = obj.pose.bones
    obj.data.bones.active = obj.data.bones[highestbone]
    posebone = posebones[highestbone]
    customshape = posebone.custom_shape
    customshapename = customshape.name
    mode_set('EDIT')
    editbone = editbones[highestbone]
    editbone.select = True
    for chld in editbone.children:
        chld.select = True
    
    mode_set('POSE')
    mode_set('EDIT')
    duplicate_move = ops.armature.duplicate_move
    duplicate_move(TRANSFORM_OT_translate={
                "value":(0, 0, figheight[0]/40)})
                
    #getting child and adding scale drivers
    mode_set('POSE') 
    obj.data.bones.active.name = 'New'       
    newbone = obj.data.bones.active
    newbonename = newbone.name 
    for ch in newbone.children:
        bname = ch.name
        bone = obj.pose.bones[bname]
        try:
            bone.driver_remove('custom_shape_scale')
        except:
            pass
        sdriver = bone.driver_add('custom_shape_scale')
        driver_scripted(sdriver, newbonename)
        if ch.name[:10] == 'Arrow_bone':
            driverbone = ch.name
    
    # Duplicating custom shape and storing
    mode_set('OBJECT')
    select_all('DESELECT')
    lscoll = bpy.data.collections['LS.Widget']
    lscoll.hide_viewport = False
    active_object(customshapename)
    bpy.ops.object.duplicate_move()
    obj = bpy.context.object
    newcustomshape = obj
    obj.data.body = newbonename
    select_all('DESELECT')
    # Creating Shapekey 
    active_object(figure_name[0])
    create_lipsync_shapekeys(newbonename)
    
    # Adding drivers
    mode_set('OBJECT')   
    select_all('DESELECT')
    active_object(figure_name[0])
    obj = bpy.context.object
    obj.show_only_shape_key = False
    obj.use_shape_key_edit_mode = False
    shape_keys = obj.data.shape_keys
    key_blocks = shape_keys.key_blocks
    driver = key_blocks[newbonename].driver_add('value')   
    shapekeys_drivers(driver, driverbone)
    select_all('DESELECT')
    lscoll.hide_viewport = True
    # Returning to pose mode
    active_object(armature_name[0])
    mode_set('POSE')
    posebones[newbonename].custom_shape = newcustomshape
Пример #16
0
def mixamo_copy():
    mode_set('OBJECT')
    empty_name_holders()
    sorting_armature()
    objs = bpy.data.objects
    b=[]
    for a in objs:
        if a.type == 'ARMATURE':
            if a.name[:8] == "Armature" or a.name[:7] == 'Genesis':
                b.append(a)
                
    Arma2 = [ob for ob in bpy.data.objects 
            if ob.name == 'GNSrig']
    if not Arma2:
        return [ERROR, except_msg[10]]
    Arma = [arm for arm in objs
        if arm.type == 'ARMATURE' 
        and (arm.name[:8] == 'Armature' 
        or arm.name[:7] == 'Genesis')]
    if not Arma:
        return [ERROR, except_msg[11]]
    
    try:
        posebones = Arma2[0].pose.bones
        const = posebones['hip'].constraints['Copy Transforms']
        if const:
            if  len(b) > 1:
                for bone in Arma2[0].pose.bones:
                    CT = [c for c in bone.constraints
                    if c.type == 'COPY_TRANSFORMS'
                    or c.type == 'COPY_ROTATION']
                    for c in CT:
                        bone.constraints.remove(c)
                                  
                for a in b:
                    if a.users_collection[0].name == "Widgets":
                        b.remove(a)
                        a.users_collection[0].objects.unlink(a)
                        purge_scene()
                        
            else:
                return [ERROR, except_msg[12]]
    except:
        pass
                
    for a in b:
        if a.users_collection[0].name == "Widgets":
            b.remove(a)
            a.users_collection[0].objects.unlink(a)
            purge_scene()
            
    if  len(b) > 1:
        b.clear()
        return [ERROR, except_msg[12]]
    else:
        empty_name_holders()
        sorting_armature()
        if Arma2[0].users_collection[0].hide_viewport == False:
            disable_GNSrig()
        rig_coll = objs['rig'].users_collection[0]
        GNS_coll = objs['GNSrig'].users_collection[0]
        if GNS_coll != rig_coll:
            GNS_coll.hide_viewport = False
        select_all('DESELECT')
        active_object('GNSrig')
        obj = bpy.context.object
        obj.data.display_type = 'STICK'    
        copy_mixam_transform()
        mode_set('OBJECT')
        obj.animation_data_clear()
        select_all('DESELECT')
        arma3 = armature_name[0]
        active_object(arma3)     
        obj = bpy.context.object
        armature_coll = obj.users_collection
        for chd in bpy.context.object.children:
            chd.select_set(True)
        obj.select_set(False)
        bpy.ops.object.delete()
        active_object(armature_name[0])
        widget_coll = bpy.data.collections['Widgets']
        widget_coll.objects.link(obj)
        armature_coll[0].objects.unlink(obj)
        select_all('DESELECT')
        adjust_framelength()
        enable_GNSrig()
        empty_name_holders()
        sorting_objects()
        active_object('GNSrig')
        if figure_name[0][:8] == 'Genesis8':
            if arma3[:8] == 'Armature':
                tilt_mixamo_bones(-0.4, 266, 76)
                tilt_mixamo_bones(0.05, 446, 446)
                tilt_mixamo_bones(-0.05, 486, 486)
            elif arma3[:8] == 'Genesis3':
                tilt_mixamo_bones(-0.4, 666, 416)
                tilt_mixamo_bones(-0.05, 196, 196)
                tilt_mixamo_bones(0.05, 26, 26)
            elif arma3[:8] == 'Genesis2':
                tilt_mixamo_bones(-0.4,  376, 586)
                tilt_mixamo_bones(-0.05, 116, 116)
                tilt_mixamo_bones(0.05, 26, 26)
        if GNS_coll != rig_coll:
            GNS_coll.hide_viewport = True
        return [SUCCESS]