pass\r
\r
\r
+class Material(object):\r
+ """material\r
+\r
+ Attributes: see __init__\r
+ """\r
+ __slots__=[\r
+ 'name',\r
+ 'english_name',\r
+ 'diffuse_color',\r
+ 'diffuse_alpha',\r
+ 'specular_color',\r
+ 'specular_factor',\r
+ 'ambient_color',\r
+ 'flag',\r
+ 'edge_color',\r
+ 'edge_size',\r
+ 'texture_index',\r
+ 'sphia_texture_index',\r
+ 'sphia_mode',\r
+ 'toon_sharing_flag',\r
+ 'toon_texture_index',\r
+ 'comment',\r
+ 'index_count',\r
+ ]\r
+ def __init__(self,\r
+ name: str,\r
+ english_name: str,\r
+ diffuse_color: common.RGB,\r
+ diffuse_alpha: float,\r
+ specular_color: common.RGB,\r
+ specular_factor: float,\r
+ ambient_color: common.RGB,\r
+ flag: int,\r
+ edge_color: common.RGBA,\r
+ edge_size: float,\r
+ texture_index: int,\r
+ sphia_texture_index: int,\r
+ sphia_mode: int,\r
+ toon_sharing_flag: int\r
+ ):\r
+ self.name=name\r
+ self.english_name=english_name\r
+ self.diffuse_color=diffuse_color\r
+ self.diffuse_alpha=diffuse_alpha\r
+ self.specular_color=specular_color\r
+ self.specular_factor=specular_factor\r
+ self.ambient_color=ambient_color\r
+ self.flag=flag\r
+ self.edge_color=edge_color\r
+ self.edge_size=edge_size\r
+ self.texture_index=texture_index\r
+ self.sphia_texture_index=sphia_texture_index\r
+ self.sphia_mode=sphia_mode\r
+ self.toon_sharing_flag=toon_sharing_flag\r
+ #\r
+ self.toon_texture_index=None\r
+ self.comment=''\r
+ self.index_count=0\r
+\r
+\r
class Deform(object):\r
pass\r
\r
comment: \r
english_comment: \r
vertices:\r
+ textures:\r
+ materials:\r
+ bones:\r
"""\r
__slots__=[\r
'version', # pmx version\r
'english_name', # model name in english\r
'comment', # model comment\r
'english_comment', # model comment in english\r
- 'vertices'\r
+ 'vertices',\r
+ 'indices',\r
+ 'textures',\r
+ 'materials',\r
+ 'bones',\r
]\r
def __init__(self):\r
self.version=0.0\r
self.comment=''\r
self.english_comment=''\r
self.vertices=[]\r
+ self.indices=[]\r
+ self.textures=[]\r
+ self.materials=[]\r
+ self.bones=[]\r
\r
\r
class IO(object):\r
####################\r
# vertices\r
####################\r
- #vertex_count=self.__read_int(self.vertex_index_size)\r
- # pmdeditor 131c bug?\r
- vertex_count=self.__read_int(4)\r
- self.__model.vertices=[self.__read_vertex() for i in range(vertex_count)]\r
+ vertex_count=self.__read_uint(4)\r
+ self.__model.vertices=[self.__read_vertex() \r
+ for i in range(vertex_count)]\r
+\r
+ ####################\r
+ # indices\r
+ ####################\r
+ index_count=self.__read_uint(4)\r
+ self.__model.indices=[self.__read_uint(self.vertex_index_size) \r
+ for i in range(index_count)]\r
+\r
+ ####################\r
+ # textures\r
+ ####################\r
+ texture_count=self.__read_uint(4)\r
+ self.__model.textures=[self.__read_text() \r
+ for i in range(texture_count)]\r
+\r
+ ####################\r
+ # materials\r
+ ####################\r
+ material_count=self.__read_uint(4)\r
+ self.__model.materials=[self.__read_material() \r
+ for i in range(material_count)]\r
+\r
+ ####################\r
+ # bones\r
+ ####################\r
+ bone_count=self.__read_uint(4)\r
+ self.__model.bones=[self.__read_bone() \r
+ for i in range(bone_count)]\r
\r
return True\r
\r
else:\r
print("unknown text encoding", self.text_encoding)\r
\r
- def __read_int(self, size):\r
+ def __read_uint(self, size):\r
if size==1:\r
return self.__unpack("B", size)\r
if size==2:\r
)\r
\r
def __read_vector2(self):\r
- print(self.__pos)\r
return common.Vector2(\r
self.__unpack("f", 4), \r
self.__unpack("f", 4)\r
)\r
\r
def __read_vector3(self):\r
- print(self.__pos)\r
return common.Vector3(\r
self.__unpack("f", 4), \r
self.__unpack("f", 4), \r
self.__unpack("f", 4)\r
)\r
\r
+ def __read_rgba(self):\r
+ return common.RGBA(\r
+ self.__unpack("f", 4), \r
+ self.__unpack("f", 4), \r
+ self.__unpack("f", 4),\r
+ self.__unpack("f", 4)\r
+ )\r
+\r
+ def __read_rgb(self):\r
+ return common.RGB(\r
+ self.__unpack("f", 4), \r
+ self.__unpack("f", 4), \r
+ self.__unpack("f", 4)\r
+ )\r
+\r
def __read_deform(self):\r
- print(self.__pos)\r
deform_type=self.__unpack("B", 1)\r
if deform_type==0:\r
- return Bdef1(self.__read_int(self.bone_index_size))\r
+ return Bdef1(self.__read_uint(self.bone_index_size))\r
if deform_type==1:\r
return Bdef2(\r
- self.__read_int(self.bone_index_size),\r
- self.__read_int(self.bone_index_size),\r
+ self.__read_uint(self.bone_index_size),\r
+ self.__read_uint(self.bone_index_size),\r
self.__unpack("f", 4)\r
)\r
"""\r
if deform_type==2:\r
return Bdef4(\r
- self.__read_int(self.bone_index_size),\r
- self.__read_int(self.bone_index_size),\r
- self.__read_int(self.bone_index_size),\r
- self.__read_int(self.bone_index_size),\r
+ self.__read_uint(self.bone_index_size),\r
+ self.__read_uint(self.bone_index_size),\r
+ self.__read_uint(self.bone_index_size),\r
+ self.__read_uint(self.bone_index_size),\r
self.__unpack("f", 4), self.__unpack("f", 4),\r
self.__unpack("f", 4), self.__unpack("f", 4)\r
)\r
"""\r
raise ParseException("unknown deform type: {0}".format(deform_type))\r
\r
+ def __read_material(self):\r
+ material=Material(\r
+ name=self.__read_text(),\r
+ english_name=self.__read_text(),\r
+ diffuse_color=self.__read_rgb(),\r
+ diffuse_alpha=self.__unpack("f", 4),\r
+ specular_color=self.__read_rgb(),\r
+ specular_factor=self.__unpack("f", 4),\r
+ ambient_color=self.__read_rgb(),\r
+ flag=self.__read_uint(1),\r
+ edge_color=self.__read_rgba(),\r
+ edge_size=self.__unpack("f", 4),\r
+ texture_index=self.__read_uint(self.texture_index_size),\r
+ sphia_texture_index=self.__read_uint(self.texture_index_size),\r
+ sphia_mode=self.__read_uint(1),\r
+ toon_sharing_flag=self.__read_uint(1),\r
+ )\r
+ if material.toon_sharing_flag==0:\r
+ material.toon_texture_index=self.__read_uint(self.texture_index_size)\r
+ elif material.toon_sharing_flag==1:\r
+ material.toon_texture_index=self.__read_uint(1)\r
+ else:\r
+ raise ParseException("unknown toon_sharing_flag {0}".format(material.toon_sharing_flag))\r
+ material.comment=self.__read_text()\r
+ material.index_count=self.__read_uint(4)\r
+ return material\r
+\r
+ def __read_bone(self):\r
+ return None\r
+\r