OSDN Git Service

refactoring export_pmd
[meshio/pymeshio.git] / pymeshio / pmd / writer.py
index 187f59d..fd8fe42 100644 (file)
@@ -1,4 +1,7 @@
 # coding: utf-8\r
+"""\r
+pmd writer\r
+"""\r
 import io\r
 import struct\r
 from .. import common\r
@@ -32,14 +35,14 @@ class Writer(common.BinaryWriter):
             self.write_uint(m.toon_index, 1)\r
             self.write_uint(m.edge_flag, 1)\r
             self.write_uint(m.vertex_count, 4)\r
-            self.write_text(m.texture_file, 20)\r
+            self.write_bytes(m.texture_file, 20)\r
 \r
     def write_bones(self, bones):\r
         self.write_uint(len(bones), 2)\r
         sBone=struct.Struct("=20sHHBH3f")\r
         assert(sBone.size==39)\r
         for b in bones:\r
-            self.write_text(b.name, 20)\r
+            self.write_bytes(b.name, 20)\r
             self.write_uint(b.parent_index, 2)\r
             self.write_uint(b.tail_index, 2)\r
             self.write_uint(b.type, 1)\r
@@ -59,7 +62,7 @@ class Writer(common.BinaryWriter):
     def write_morphs(self, morphs):\r
         self.write_uint(len(morphs), 2)\r
         for morph in morphs:\r
-            self.write_text(morph.name, 20)\r
+            self.write_bytes(morph.name, 20)\r
             self.write_uint(len(morph.indices), 4)\r
             self.write_uint(morph.type, 1)\r
             for i, v in zip(morph.indices, morph.pos_list):\r
@@ -73,7 +76,7 @@ class Writer(common.BinaryWriter):
     def write_bone_group_list(self, bone_group_list):\r
         self.write_uint(len(bone_group_list), 1)\r
         for g in bone_group_list:\r
-            self.write_text(g.name, 50)\r
+            self.write_bytes(g.name, 50)\r
 \r
     def write_bone_display_list(self, bone_display_list):\r
         self.write_uint(len(bone_display_list), 4)\r
@@ -84,10 +87,10 @@ class Writer(common.BinaryWriter):
     def write_rigidbodies(self, rigidbodies):\r
         self.write_uint(len(rigidbodies), 4)\r
         for r in rigidbodies:\r
-            self.write_text(r.name, 20)\r
-            self.write_uint(r.bone_index, 2)\r
+            self.write_bytes(r.name, 20)\r
+            self.write_int(r.bone_index, 2)\r
             self.write_uint(r.collision_group, 1)\r
-            self.write_uint(r.no_collision_group, 2)\r
+            self.write_int(r.no_collision_group, 2)\r
             self.write_uint(r.shape_type, 1)\r
             self.write_vector3(r.shape_size)\r
             self.write_vector3(r.shape_position)\r
@@ -102,7 +105,7 @@ class Writer(common.BinaryWriter):
     def write_joints(self, joints):\r
         self.write_uint(len(joints), 4)\r
         for j in joints:\r
-            self.write_text(j.name, 20)\r
+            self.write_bytes(j.name, 20)\r
             self.write_uint(j.rigidbody_index_a, 4)\r
             self.write_uint(j.rigidbody_index_b, 4)\r
             self.write_vector3(j.position)\r
@@ -116,13 +119,26 @@ class Writer(common.BinaryWriter):
 \r
 \r
 def write(ios, model):\r
+    """\r
+    write model to ios.\r
+\r
+    :Parameters:\r
+        ios\r
+            output stream (in io.IOBase)\r
+        model\r
+            pmd model\r
+\r
+    >>> import pymeshio.pmd.writer\r
+    >>> pymeshio.pmd.writer.write(io.open('out.pmd', 'wb'), pmd_model)\r
+\r
+    """\r
     assert(isinstance(ios, io.IOBase))\r
     assert(isinstance(model, pmd.Model))\r
     writer=Writer(ios)\r
-    writer.write_text(b"Pmd")\r
+    writer.write_bytes(b"Pmd")\r
     writer.write_float(model.version)\r
-    writer.write_text(model.name, 20)\r
-    writer.write_text(model.comment, 256)\r
+    writer.write_bytes(model.name, 20)\r
+    writer.write_bytes(model.comment, 256)\r
     writer.write_veritices(model.vertices)\r
     writer.write_indices(model.indices)\r
     writer.write_materials(model.materials)\r
@@ -134,18 +150,18 @@ def write(ios, model):
     writer.write_bone_display_list(model.bone_display_list)\r
     # extend data\r
     writer.write_uint(1, 1)\r
-    writer.write_text(model.english_name, 20)\r
-    writer.write_text(model.english_comment, 256)\r
+    writer.write_bytes(model.english_name, 20)\r
+    writer.write_bytes(model.english_comment, 256)\r
     for bone in model.bones:\r
-        writer.write_text(bone.english_name, 20)\r
+        writer.write_bytes(bone.english_name, 20)\r
     for skin in model.morphs:\r
         if skin.name==b'base':\r
             continue\r
-        writer.write_text(skin.english_name, 20)\r
+        writer.write_bytes(skin.english_name, 20)\r
     for g in model.bone_group_list:\r
-        writer.write_text(g.english_name, 50)\r
+        writer.write_bytes(g.english_name, 50)\r
     for toon_texture in model.toon_textures:\r
-        writer.write_text(toon_texture, 100)\r
+        writer.write_bytes(toon_texture, 100)\r
     writer.write_rigidbodies(model.rigidbodies)\r
     writer.write_joints(model.joints)\r
     return True\r