From f4ab30fd28a4cb62ba6f7dd5fc7023182b8a2371 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Fri, 14 Oct 2011 23:23:18 +0900 Subject: [PATCH] implement shape key --- blender26-meshio/import_pmx.py | 20 +++++++++++++++++++- pymeshio/converter.py | 2 +- pymeshio/pmx/__init__.py | 14 +++++++------- pymeshio/pmx/reader.py | 2 +- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/blender26-meshio/import_pmx.py b/blender26-meshio/import_pmx.py index db2c3d7..e29f3a0 100644 --- a/blender26-meshio/import_pmx.py +++ b/blender26-meshio/import_pmx.py @@ -178,7 +178,7 @@ def _execute(filepath): print("%s(%d)" % (name, letter_count)) return name for i, m in enumerate(model.materials): - print(m.name) + #print(m.name) # material作成 material=__create_a_material(m, m.name, textures_and_images) # object名はutf-8で21byteまで @@ -235,5 +235,23 @@ def _execute(filepath): else: raise Exception("unknown deform: %s" % v.deform) + # set shape_key pin + bl.object.pinShape(mesh_object, True) + # create base key + baseShapeBlock=bl.object.addShapeKey(mesh_object, bl.BASE_SHAPE_NAME) + mesh.update() + for m in model.morphs: + new_shape_key=bl.object.addShapeKey(mesh_object, m.name) + for o in m.offsets: + if isinstance(o, pmx.VertexMorphOffset): + bl.shapekey.assign(new_shape_key, + o.vertex_index, + mesh.vertices[o.vertex_index].co+ + bl.createVector(*convert_coord(o.position_offset))) + else: + raise Exception("unknown morph type: %s" % o) + # select base shape + bl.object.setActivateShapeKey(mesh_object, 0) + return {'FINISHED'} diff --git a/pymeshio/converter.py b/pymeshio/converter.py index 65ffadf..373fe39 100644 --- a/pymeshio/converter.py +++ b/pymeshio/converter.py @@ -275,7 +275,7 @@ def pmd_to_pmx(src): english_name=m.english_name.decode('cp932'), panel=get_panel(m), morph_type=1, - offsets=[pmx.VerexMorphOffset(base.indices[i], pos) + offsets=[pmx.VertexMorphOffset(base.indices[i], pos) for i, pos in zip(m.indices, m.pos_list)] ) for i, m in enumerate(src.morphs) if m.name!=b"base"] diff --git a/pymeshio/pmx/__init__.py b/pymeshio/pmx/__init__.py index b794677..2cd954a 100644 --- a/pymeshio/pmx/__init__.py +++ b/pymeshio/pmx/__init__.py @@ -107,8 +107,8 @@ class IkLink(Diff): def __init__(self, bone_index, limit_angle, limit_min=None, limit_max=None): self.bone_index=bone_index self.limit_angle=limit_angle - self.limit_min=limit_min or common.Vector3 - self.limit_max=limit_max or common.Vector3 + self.limit_min=limit_min or common.Vector3() + self.limit_max=limit_max or common.Vector3() def __eq__(self, rhs): return ( @@ -171,13 +171,13 @@ class Bone(Diff): self.parent_index=parent_index self.layer=layer self.flag=flag - self.tail_position=tail_position or common.Vector3 + self.tail_position=tail_position or common.Vector3() self.tail_index=tail_index self.effect_index=effect_index self.effect_factor=effect_factor - self.fixed_axis=fixed_axis or common.Vector3 - self.local_x_vector=local_x_vector or common.Vector3 - self.local_z_vector=local_z_vector or common.Vector3 + self.fixed_axis=fixed_axis or common.Vector3() + self.local_x_vector=local_x_vector or common.Vector3() + self.local_z_vector=local_z_vector or common.Vector3() self.external_key=external_key self.ik=ik @@ -497,7 +497,7 @@ class Morph(Diff): self._diff_array(rhs, 'offsets') -class VerexMorphOffset(Diff): +class VertexMorphOffset(Diff): """pmx vertex morph offset Attributes: diff --git a/pymeshio/pmx/reader.py b/pymeshio/pmx/reader.py index b7227ba..d28cbad 100644 --- a/pymeshio/pmx/reader.py +++ b/pymeshio/pmx/reader.py @@ -216,7 +216,7 @@ class Reader(common.BinaryReader): "unknown morph type: {0}".format(morph_type)) def read_vertex_morph_offset(self): - return pmx.VerexMorphOffset( + return pmx.VertexMorphOffset( self.read_vertex_index(), self.read_vector3()) def read_display_slot(self): -- 2.11.0