OSDN Git Service

fix for pmxmca
authorousttrue <ousttrue@gmail.com>
Tue, 11 Oct 2011 19:24:57 +0000 (04:24 +0900)
committerousttrue <ousttrue@gmail.com>
Tue, 11 Oct 2011 19:24:57 +0000 (04:24 +0900)
pymeshio/common.py
pymeshio/converter.py
pymeshio/pmd/reader.py

index e8e385c..9083fb6 100644 (file)
@@ -5,6 +5,7 @@ common utilities.
 import math\r
 import struct\r
 import sys\r
+import io\r
 \r
 \r
 def unicode(src):\r
@@ -311,10 +312,16 @@ class BinaryReader(object):
     """general BinaryReader\r
     """\r
     def __init__(self, ios):\r
+        current=ios.tell()\r
+        ios.seek(0, io.SEEK_END)\r
+        self.end=ios.tell()\r
+        ios.seek(current)\r
         self.ios=ios\r
 \r
     def is_end(self):\r
-        return not self.ios.readable()\r
+        #print(self.ios.tell(), self.end)\r
+        return self.ios.tell()>=self.end\r
+        #return not self.ios.readable()\r
 \r
     def unpack(self, fmt, size):\r
         result=struct.unpack(fmt, self.ios.read(size))\r
index 0f4b85c..65ffadf 100644 (file)
@@ -266,18 +266,19 @@ def pmd_to_pmx(src):
     # bones
     def get_panel(m):
         return 1
-    base=src.morphs[0]
-    assert(base.name==b"base")
-    dst.morphs=[
-            pmx.Morph(
-                name=m.name.decode('cp932'),
-                english_name=m.english_name.decode('cp932'),
-                panel=get_panel(m),
-                morph_type=1,
-                offsets=[pmx.VerexMorphOffset(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"]
+    if len(src.morphs)>0:
+        base=src.morphs[0]
+        assert(base.name==b"base")
+        dst.morphs=[
+                pmx.Morph(
+                    name=m.name.decode('cp932'),
+                    english_name=m.english_name.decode('cp932'),
+                    panel=get_panel(m),
+                    morph_type=1,
+                    offsets=[pmx.VerexMorphOffset(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"]
     # display_slots
     dst.display_slots=[
             pmx.DisplaySlot(u('Root'), u('Root'), 1),
index ddce5b9..2cee729 100644 (file)
@@ -142,19 +142,19 @@ def __read(reader, model):
     ############################################################\r
     # extend1: english name\r
     ############################################################\r
-    if reader.read_uint(1)==0:\r
-        #print("no extend flag")\r
-        return True\r
-    model.english_name=reader.read_text(20)\r
-    model.english_comment=reader.read_text(256)\r
-    for bone in model.bones:\r
-        bone.english_name=reader.read_text(20)\r
-    for morph in model.morphs:\r
-        if morph.name==b'base':\r
-            continue\r
-        morph.english_name=reader.read_text(20)\r
-    for g in model.bone_group_list:\r
-        g.english_name=reader.read_text(50)\r
+    if reader.read_uint(1)==1:\r
+        print("no extend flag")\r
+        #return True\r
+        model.english_name=reader.read_text(20)\r
+        model.english_comment=reader.read_text(256)\r
+        for bone in model.bones:\r
+            bone.english_name=reader.read_text(20)\r
+        for morph in model.morphs:\r
+            if morph.name==b'base':\r
+                continue\r
+            morph.english_name=reader.read_text(20)\r
+        for g in model.bone_group_list:\r
+            g.english_name=reader.read_text(50)\r
 \r
 \r
     ############################################################\r