コード例 #1
0
ファイル: morph.py プロジェクト: ztkbalka/cats-blender-plugin
def _set_name(prop, value):
    mmd_root = prop.id_data.mmd_root
    #morph_type = mmd_root.active_morph_type
    morph_type = '%s_morphs' % prop.bl_rna.identifier[:-5].lower()
    #assert(prop.bl_rna.identifier.endswith('Morph'))
    #print('_set_name:', prop, value, morph_type)
    prop_name = prop.get('name', None)
    if prop_name == value:
        return

    used_names = {x.name for x in getattr(mmd_root, morph_type) if x != prop}
    value = utils.uniqueName(value, used_names)
    if prop_name is not None:
        if morph_type == 'vertex_morphs':
            kb_list = {}
            for mesh in FnModel(prop.id_data).meshes():
                for kb in getattr(mesh.data.shape_keys, 'key_blocks', ()):
                    kb_list.setdefault(kb.name, []).append(kb)

            if prop_name in kb_list:
                value = utils.uniqueName(value, used_names | kb_list.keys())
                for kb in kb_list[prop_name]:
                    kb.name = value

        elif morph_type == 'uv_morphs':
            vg_list = {}
            for mesh in FnModel(prop.id_data).meshes():
                for vg, n, x in FnMorph.get_uv_morph_vertex_groups(mesh):
                    vg_list.setdefault(n, []).append(vg)

            if prop_name in vg_list:
                value = utils.uniqueName(value, used_names | vg_list.keys())
                for vg in vg_list[prop_name]:
                    vg.name = vg.name.replace(prop_name, value)

        if 1:  #morph_type != 'group_morphs':
            for m in mmd_root.group_morphs:
                for d in m.data:
                    if d.name == prop_name and d.morph_type == morph_type:
                        d.name = value

        frame_facial = mmd_root.display_item_frames.get(u'表情')
        for item in getattr(frame_facial, 'data', []):
            if item.name == prop_name and item.morph_type == morph_type:
                item.name = value
                break

        obj = FnModel(prop.id_data).morph_slider.placeholder()
        if obj and value not in obj.data.shape_keys.key_blocks:
            kb = obj.data.shape_keys.key_blocks.get(prop_name, None)
            if kb:
                kb.name = value

    prop['name'] = value
コード例 #2
0
ファイル: morph.py プロジェクト: ztkbalka/cats-blender-plugin
def _update_bone_morph_data(prop, context):
    if not prop.name.startswith('mmd_bind'):
        return
    arm = FnModel(prop.id_data).morph_slider.dummy_armature
    if arm:
        bone = arm.pose.bones.get(prop.name, None)
        if bone:
            bone.location = prop.location
            bone.rotation_quaternion = prop.rotation
コード例 #3
0
ファイル: morph.py プロジェクト: ztkbalka/cats-blender-plugin
def _set_bone(prop, value):
    root = prop.id_data
    fnModel = FnModel(root)
    arm = fnModel.armature()
    if value not in arm.pose.bones.keys():
        prop['bone_id'] = -1
        return
    pose_bone = arm.pose.bones[value]
    fnBone = FnBone(pose_bone)
    prop['bone_id'] = fnBone.bone_id
コード例 #4
0
ファイル: morph.py プロジェクト: zorrock/cats-blender-plugin
def _update_bone_morph_data(prop, context):
    if not prop.name.startswith('mmd_bind'):
        return
    arm = FnModel(prop.id_data).morph_slider.dummy_armature
    if arm:
        bone = arm.pose.bones.get(prop.name, None)
        if bone:
            bone.location = prop.location
            bone.rotation_quaternion = prop.rotation.__class__(
                *prop.rotation.to_axis_angle())  # Fix for consistency
コード例 #5
0
ファイル: morph.py プロジェクト: ztkbalka/cats-blender-plugin
def _update_material_morph_data(prop, context):
    if not prop.name.startswith('mmd_bind'):
        return
    from mmd_tools_local.core.shader import _MaterialMorph
    mat_id = prop.get('material_id', -1)
    if mat_id >= 0:
        mat = getattr(FnMaterial.from_material_id(mat_id), 'material', None)
        _MaterialMorph.update_morph_inputs(mat, prop)
    elif mat_id == -1:
        for mat in FnModel(prop.id_data).materials():
            _MaterialMorph.update_morph_inputs(mat, prop)
コード例 #6
0
ファイル: morph.py プロジェクト: ztkbalka/cats-blender-plugin
def _get_bone(prop):
    bone_id = prop.get('bone_id', -1)
    if bone_id < 0:
        return ''
    root = prop.id_data
    fnModel = FnModel(root)
    arm = fnModel.armature()
    fnBone = FnBone.from_bone_id(arm, bone_id)
    if not fnBone:
        return ''
    return fnBone.pose_bone.name
コード例 #7
0
def _set_name(prop, value):
    mmd_root = prop.id_data.mmd_root
    #morph_type = mmd_root.active_morph_type
    morph_type = '%s_morphs' % prop.bl_rna.identifier[:-5].lower()
    #assert(prop.bl_rna.identifier.endswith('Morph'))
    #print('_set_name:', prop, value, morph_type)
    prop_name = prop.get('name', None)
    if prop_name == value:
        return

    used_names = set(x.name for x in getattr(mmd_root, morph_type))
    value = utils.uniqueName(value, used_names)
    if prop_name is not None:
        if morph_type == 'vertex_morphs':
            kb_list = {}
            for mesh in FnModel(prop.id_data).meshes():
                shape_keys = mesh.data.shape_keys
                if shape_keys:
                    for kb in shape_keys.key_blocks:
                        kb_list.setdefault(kb.name, []).append(kb)

            if prop_name in kb_list:
                value = utils.uniqueName(value, used_names | kb_list.keys())
                for kb in kb_list[prop_name]:
                    kb.name = value

        if 1:  #morph_type != 'group_morphs':
            for m in mmd_root.group_morphs:
                for d in m.data:
                    if d.name == prop_name and d.morph_type == morph_type:
                        d.name = value

        for item in mmd_root.display_item_frames[u'表情'].items:
            if item.name == prop_name and item.morph_type == morph_type:
                item.name = value
                break

    prop['name'] = value
コード例 #8
0
ファイル: morph.py プロジェクト: ztkbalka/cats-blender-plugin
def _set_related_mesh(prop, value):
    rig = FnModel(prop.id_data)
    if rig.findMesh(value):
        prop['related_mesh'] = value
    else:
        prop['related_mesh'] = ''