OSDN Git Service

implement shape key
authorousttrue <ousttrue@gmail.com>
Fri, 14 Oct 2011 14:23:18 +0000 (23:23 +0900)
committerousttrue <ousttrue@gmail.com>
Fri, 14 Oct 2011 14:23:18 +0000 (23:23 +0900)
blender26-meshio/import_pmx.py
pymeshio/converter.py
pymeshio/pmx/__init__.py
pymeshio/pmx/reader.py

index db2c3d7..e29f3a0 100644 (file)
@@ -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'}
 
index 65ffadf..373fe39 100644 (file)
@@ -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"]
index b794677..2cd954a 100644 (file)
@@ -107,8 +107,8 @@ class IkLink(Diff):
     def __init__(self, bone_index, limit_angle, limit_min=None, limit_max=None):\r
         self.bone_index=bone_index\r
         self.limit_angle=limit_angle\r
-        self.limit_min=limit_min or common.Vector3\r
-        self.limit_max=limit_max or common.Vector3\r
+        self.limit_min=limit_min or common.Vector3()\r
+        self.limit_max=limit_max or common.Vector3()\r
 \r
     def __eq__(self, rhs):\r
         return (\r
@@ -171,13 +171,13 @@ class Bone(Diff):
         self.parent_index=parent_index\r
         self.layer=layer\r
         self.flag=flag\r
-        self.tail_position=tail_position or common.Vector3\r
+        self.tail_position=tail_position or common.Vector3()\r
         self.tail_index=tail_index\r
         self.effect_index=effect_index\r
         self.effect_factor=effect_factor\r
-        self.fixed_axis=fixed_axis or common.Vector3\r
-        self.local_x_vector=local_x_vector or common.Vector3\r
-        self.local_z_vector=local_z_vector or common.Vector3\r
+        self.fixed_axis=fixed_axis or common.Vector3()\r
+        self.local_x_vector=local_x_vector or common.Vector3()\r
+        self.local_z_vector=local_z_vector or common.Vector3()\r
         self.external_key=external_key\r
         self.ik=ik\r
 \r
@@ -497,7 +497,7 @@ class Morph(Diff):
         self._diff_array(rhs, 'offsets')\r
 \r
 \r
-class VerexMorphOffset(Diff):\r
+class VertexMorphOffset(Diff):\r
     """pmx vertex morph offset\r
 \r
     Attributes:\r
index b7227ba..d28cbad 100644 (file)
@@ -216,7 +216,7 @@ class Reader(common.BinaryReader):
                     "unknown morph type: {0}".format(morph_type))\r
 \r
     def read_vertex_morph_offset(self):\r
-        return pmx.VerexMorphOffset(\r
+        return pmx.VertexMorphOffset(\r
                 self.read_vertex_index(), self.read_vector3())\r
 \r
     def read_display_slot(self):\r