# coding: utf-8\r
+"""\r
+pmx reader\r
+"""\r
import io\r
import pymeshio.common\r
import pymeshio.pmx\r
if extended_uv>0:\r
raise pymeshio.common.ParseException(\r
"extended uv is not supported", extended_uv)\r
- self.read_vertex_index=lambda : self.read_uint(vertex_index_size)\r
- self.read_texture_index=lambda : self.read_uint(texture_index_size)\r
- self.read_material_index=lambda : self.read_uint(material_index_size)\r
- self.read_bone_index=lambda : self.read_uint(bone_index_size)\r
- self.read_morph_index=lambda : self.read_uint(morph_index_size)\r
- self.read_rigidbody_index=lambda : self.read_uint(rigidbody_index_size)\r
+ self.read_vertex_index=lambda : self.read_int(vertex_index_size)\r
+ self.read_texture_index=lambda : self.read_int(texture_index_size)\r
+ self.read_material_index=lambda : self.read_int(material_index_size)\r
+ self.read_bone_index=lambda : self.read_int(bone_index_size)\r
+ self.read_morph_index=lambda : self.read_int(morph_index_size)\r
+ self.read_rigidbody_index=lambda : self.read_int(rigidbody_index_size)\r
\r
def __str__(self):\r
return '<pymeshio.pmx.Reader>'\r
def get_read_text(self, text_encoding):\r
if text_encoding==0:\r
def read_text():\r
- size=self.read_uint(4)\r
+ size=self.read_int(4)\r
return self.unpack("{0}s".format(size), size).decode("UTF16")\r
return read_text\r
elif text_encoding==1:\r
def read_text():\r
- size=self.read_uint(4)\r
+ size=self.read_int(4)\r
return self.unpack("{0}s".format(size), size).decode("UTF8")\r
return read_text\r
else:\r
)\r
\r
def read_deform(self):\r
- deform_type=self.read_uint(1)\r
+ deform_type=self.read_int(1)\r
if deform_type==0:\r
return pymeshio.pmx.Bdef1(self.read_bone_index())\r
elif deform_type==1:\r
name=self.read_text(),\r
english_name=self.read_text(),\r
diffuse_color=self.read_rgb(),\r
- diffuse_alpha=self.read_float(),\r
+ alpha=self.read_float(),\r
specular_color=self.read_rgb(),\r
specular_factor=self.read_float(),\r
ambient_color=self.read_rgb(),\r
- flag=self.read_uint(1),\r
+ flag=self.read_int(1),\r
edge_color=self.read_rgba(),\r
edge_size=self.read_float(),\r
texture_index=self.read_texture_index(),\r
- sphia_texture_index=self.read_texture_index(),\r
- sphia_mode=self.read_uint(1),\r
- toon_sharing_flag=self.read_uint(1),\r
+ sphere_texture_index=self.read_texture_index(),\r
+ sphere_mode=self.read_int(1),\r
+ toon_sharing_flag=self.read_int(1),\r
)\r
if material.toon_sharing_flag==0:\r
material.toon_texture_index=self.read_texture_index()\r
elif material.toon_sharing_flag==1:\r
- material.toon_texture_index=self.read_uint(1)\r
+ material.toon_texture_index=self.read_int(1)\r
else:\r
raise pymeshio.common.ParseException(\r
"unknown toon_sharing_flag {0}".format(\r
material.toon_sharing_flag))\r
material.comment=self.read_text()\r
- material.vertex_count=self.read_uint(4)\r
+ material.vertex_count=self.read_int(4)\r
return material\r
\r
def read_bone(self):\r
english_name=self.read_text(),\r
position=self.read_vector3(),\r
parent_index=self.read_bone_index(),\r
- layer=self.read_uint(4),\r
- flag=self.read_uint(2) \r
+ layer=self.read_int(4),\r
+ flag=self.read_int(2) \r
)\r
if bone.getConnectionFlag()==0:\r
- bone.tail_positoin=self.read_vector3()\r
+ bone.tail_position=self.read_vector3()\r
elif bone.getConnectionFlag()==1:\r
bone.tail_index=self.read_bone_index()\r
else:\r
bone.local_z_vector=self.read_vector3()\r
\r
if bone.getExternalParentDeformFlag()==1:\r
- bone.external_key=self.read_uint(4)\r
+ bone.external_key=self.read_int(4)\r
\r
if bone.getIkFlag()==1:\r
bone.ik=self.read_ik()\r
def read_ik(self):\r
ik=pymeshio.pmx.Ik(\r
target_index=self.read_bone_index(),\r
- loop=self.read_uint(4),\r
+ loop=self.read_int(4),\r
limit_radian=self.read_float())\r
- link_size=self.read_uint(4)\r
+ link_size=self.read_int(4)\r
ik.link=[self.read_ik_link() \r
for _ in range(link_size)]\r
+ return ik\r
\r
def read_ik_link(self):\r
link=pymeshio.pmx.IkLink(\r
self.read_bone_index(),\r
- self.read_uint(1))\r
+ self.read_int(1))\r
if link.limit_angle==0:\r
pass\r
elif link.limit_angle==1:\r
def read_morgh(self):\r
name=self.read_text()\r
english_name=self.read_text()\r
- panel=self.read_uint(1)\r
- morph_type=self.read_uint(1)\r
- offset_size=self.read_uint(4)\r
+ panel=self.read_int(1)\r
+ morph_type=self.read_int(1)\r
+ offset_size=self.read_int(4)\r
if morph_type==0:\r
# todo\r
raise pymeshio.common.ParseException(\r
\r
def read_display_slot(self):\r
display_slot=pymeshio.pmx.DisplaySlot(self.read_text(), self.read_text(), \r
- self.read_uint(1))\r
- display_count=self.read_uint(4)\r
+ self.read_int(1))\r
+ display_count=self.read_int(4)\r
for _ in range(display_count):\r
- display_type=self.read_uint(1)\r
+ display_type=self.read_int(1)\r
if display_type==0:\r
display_slot.refrences.append(\r
(display_type, self.read_bone_index()))\r
else:\r
raise pymeshio.common.ParseException(\r
"unknown display_type: {0}".format(display_type))\r
+ return display_slot\r
\r
def read_rigidbody(self):\r
return pymeshio.pmx.RigidBody(\r
name=self.read_text(), \r
english_name=self.read_text(),\r
bone_index=self.read_bone_index(),\r
- collision_group=self.read_uint(1),\r
- no_collision_group=self.read_uint(2),\r
- shape_type=self.read_uint(1),\r
+ collision_group=self.read_int(1),\r
+ no_collision_group=self.read_int(2),\r
+ shape_type=self.read_int(1),\r
shape_size=self.read_vector3(),\r
shape_position=self.read_vector3(),\r
shape_rotation=self.read_vector3(),\r
angular_damping=self.read_float(),\r
restitution=self.read_float(),\r
friction=self.read_float(),\r
- mode=self.read_uint(1)\r
+ mode=self.read_int(1)\r
)\r
\r
def read_joint(self):\r
return pymeshio.pmx.Joint(\r
name=self.read_text(),\r
english_name=self.read_text(),\r
- joint_type=self.read_uint(1),\r
+ joint_type=self.read_int(1),\r
rigidbody_index_a=self.read_rigidbody_index(),\r
rigidbody_index_b=self.read_rigidbody_index(),\r
position=self.read_vector3(),\r
\r
\r
def read_from_file(path):\r
- return read(io.BytesIO(pymeshio.common.readall(path)))\r
+ """\r
+ read from file path, then return the pymeshio.pmx.Model.\r
+\r
+ :Parameters:\r
+ path\r
+ file path\r
+\r
+ >>> import pymeshio.pmx.reader\r
+ >>> m=pymeshio.pmx.reader.read_from_file('resources/初音ミクVer2.pmx')\r
+ >>> print(m)\r
+ <pmx-2.0 "Miku Hatsune" 12354vertices>\r
+\r
+ """\r
+ pmx=read(io.BytesIO(pymeshio.common.readall(path)))\r
+ pmx.path=path\r
+ return pmx\r
\r
\r
def read(ios):\r
+ """\r
+ read from ios, then return the pmx pymeshio.pmx.Model.\r
+\r
+ :Parameters:\r
+ ios\r
+ input stream (in io.IOBase)\r
+\r
+ >>> import pymeshio.pmx.reader\r
+ >>> m=pymeshio.pmx.reader.read(io.open('resources/初音ミクVer2.pmx', 'rb'))\r
+ >>> print(m)\r
+ <pmx-2.0 "Miku Hatsune" 12354vertices>\r
+\r
+ """\r
assert(isinstance(ios, io.IOBase))\r
reader=pymeshio.common.BinaryReader(ios)\r
\r
model=pymeshio.pmx.Model(version)\r
\r
# flags\r
- flag_bytes=reader.read_uint(1)\r
+ flag_bytes=reader.read_int(1)\r
if flag_bytes!=8:\r
raise pymeshio.common.ParseException(\r
"invalid flag length", reader.flag_bytes)\r
- text_encoding=reader.read_uint(1)\r
- extended_uv=reader.read_uint(1)\r
- vertex_index_size=reader.read_uint(1)\r
- texture_index_size=reader.read_uint(1)\r
- material_index_size=reader.read_uint(1)\r
- bone_index_size=reader.read_uint(1)\r
- morph_index_size=reader.read_uint(1)\r
- rigidbody_index_size=reader.read_uint(1)\r
+ text_encoding=reader.read_int(1)\r
+ extended_uv=reader.read_int(1)\r
+ vertex_index_size=reader.read_int(1)\r
+ texture_index_size=reader.read_int(1)\r
+ material_index_size=reader.read_int(1)\r
+ bone_index_size=reader.read_int(1)\r
+ morph_index_size=reader.read_int(1)\r
+ rigidbody_index_size=reader.read_int(1)\r
\r
# pmx custom reader\r
- reader=Reader(reader.io,\r
+ reader=Reader(reader.ios,\r
text_encoding,\r
extended_uv,\r
vertex_index_size,\r
\r
# model data\r
model.vertices=[reader.read_vertex() \r
- for _ in range(reader.read_uint(4))]\r
+ for _ in range(reader.read_int(4))]\r
model.indices=[reader.read_vertex_index() \r
- for _ in range(reader.read_uint(4))]\r
+ for _ in range(reader.read_int(4))]\r
model.textures=[reader.read_text() \r
- for _ in range(reader.read_uint(4))]\r
+ for _ in range(reader.read_int(4))]\r
model.materials=[reader.read_material() \r
- for _ in range(reader.read_uint(4))]\r
+ for _ in range(reader.read_int(4))]\r
model.bones=[reader.read_bone() \r
- for _ in range(reader.read_uint(4))]\r
+ for _ in range(reader.read_int(4))]\r
model.morphs=[reader.read_morgh() \r
- for _ in range(reader.read_uint(4))]\r
+ for _ in range(reader.read_int(4))]\r
model.display_slots=[reader.read_display_slot() \r
- for _ in range(reader.read_uint(4))]\r
+ for _ in range(reader.read_int(4))]\r
model.rigidbodies=[reader.read_rigidbody()\r
- for _ in range(reader.read_uint(4))]\r
+ for _ in range(reader.read_int(4))]\r
model.joints=[reader.read_joint()\r
- for _ in range(reader.read_uint(4))]\r
+ for _ in range(reader.read_int(4))]\r
\r
return model\r
\r