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
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
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
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
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)
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
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
def _set_related_mesh(prop, value): rig = FnModel(prop.id_data) if rig.findMesh(value): prop['related_mesh'] = value else: prop['related_mesh'] = ''