#coding: utf-8\r
+"""\r
+pmd reader\r
+"""\r
import io\r
-import pymeshio.common\r
-import pymeshio.pmd\r
+from .. import common\r
+from .. import pmd\r
\r
\r
-class Reader(pymeshio.common.BinaryReader):\r
+class Reader(common.BinaryReader):\r
"""pmx reader\r
"""\r
def __init__(self, ios, version):\r
return src[:pos]\r
\r
def read_vertex(self):\r
- return pymeshio.pmd.Vertex(\r
+ return pmd.Vertex(\r
self.read_vector3(),\r
self.read_vector3(),\r
self.read_vector2(),\r
self.read_uint(1))\r
\r
def read_material(self):\r
- return pymeshio.pmd.Material(\r
+ return pmd.Material(\r
diffuse_color=self.read_rgb(),\r
alpha=self.read_float(),\r
specular_factor=self.read_float(),\r
specular_color=self.read_rgb(),\r
ambient_color=self.read_rgb(),\r
- toon_index=self.read_uint(1),\r
+ toon_index=self.read_int(1),\r
edge_flag=self.read_uint(1),\r
vertex_count=self.read_uint(4),\r
texture_file=self.read_text(20)\r
name=self.read_text(20)\r
parent_index=self.read_uint(2)\r
tail_index=self.read_uint(2)\r
- bone=pymeshio.pmd.createBone(name, self.read_uint(1))\r
+ bone=pmd.createBone(name, self.read_uint(1))\r
bone.parent_index=parent_index\r
bone.tail_index=tail_index\r
bone.ik_index = self.read_uint(2)\r
return bone\r
\r
def read_ik(self):\r
- ik=pymeshio.pmd.IK(self.read_uint(2), self.read_uint(2))\r
+ ik=pmd.IK(self.read_uint(2), self.read_uint(2))\r
ik.length = self.read_uint(1)\r
ik.iterations = self.read_uint(2)\r
ik.weight = self.read_float()\r
return ik\r
\r
def read_morph(self):\r
- morph=pymeshio.pmd.Morph(self.read_text(20))\r
+ morph=pmd.Morph(self.read_text(20))\r
morph_size = self.read_uint(4)\r
morph.type = self.read_uint(1)\r
for j in range(morph_size):\r
return morph\r
\r
def read_rigidbody(self):\r
- return pymeshio.pmd.RigidBody(\r
+ return pmd.RigidBody(\r
name=self.read_text(20), \r
- bone_index=self.read_uint(2),\r
- collision_group=self.read_uint(1),\r
- no_collision_group=self.read_uint(2),\r
+ bone_index=self.read_int(2),\r
+ collision_group=self.read_int(1),\r
+ no_collision_group=self.read_int(2),\r
shape_type=self.read_uint(1),\r
shape_size=self.read_vector3(),\r
shape_position=self.read_vector3(),\r
)\r
\r
def read_joint(self):\r
- return pymeshio.pmd.Joint(\r
+ return pmd.Joint(\r
name=self.read_text(20),\r
rigidbody_index_a=self.read_uint(4),\r
rigidbody_index_b=self.read_uint(4),\r
for _ in range(reader.read_uint(2))]\r
model.morph_indices=[reader.read_uint(2)\r
for _ in range(reader.read_uint(1))]\r
- model.bone_group_list=[reader.read_text(50)\r
+ model.bone_group_list=[pmd.BoneGroup(reader.read_text(50))\r
for _ in range(reader.read_uint(1))]\r
model.bone_display_list=[(reader.read_uint(2), reader.read_uint(1))\r
for _i in range(reader.read_uint(4))]\r
# extend1: english name\r
############################################################\r
if reader.read_uint(1)==0:\r
- print("no extend flag")\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
if morph.name==b'base':\r
continue\r
morph.english_name=reader.read_text(20)\r
- model.bone_group_english_list=[reader.read_text(50)\r
- for _ in model.bone_group_list]\r
+ for g in model.bone_group_list:\r
+ g.english_name=reader.read_text(50)\r
+\r
\r
############################################################\r
# extend2: toon_textures\r
if reader.is_end():\r
# EOF\r
return True\r
+\r
model.rigidbodies=[reader.read_rigidbody()\r
for _ in range(reader.read_uint(4))]\r
model.joints=[reader.read_joint()\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.pmd.Model.\r
+\r
+ :Parameters:\r
+ path\r
+ file path\r
+\r
+ >>> import pymeshio.pmd.reader\r
+ >>> m=pymeshio.pmd.reader.read_from_file('resources/初音ミクVer2.pmd')\r
+ >>> print(m)\r
+ <pmd-2.0 "Miku Hatsune" 12354vertices>\r
+\r
+ """\r
+ pmd=read(io.BytesIO(common.readall(path)))\r
+ pmd.path=path\r
+ return pmd\r
\r
\r
def read(ios):\r
+ """\r
+ read from ios, then return the pymeshio.pmd.Model.\r
+\r
+ :Parameters:\r
+ ios\r
+ input stream (in io.IOBase)\r
+\r
+ >>> import pymeshio.pmd.reader\r
+ >>> m=pymeshio.pmd.reader.read(io.open('resources/初音ミクVer2.pmd', 'rb'))\r
+ >>> print(m)\r
+ <pmd-2.0 "Miku Hatsune" 12354vertices>\r
+\r
+ """\r
assert(isinstance(ios, io.IOBase))\r
- reader=pymeshio.common.BinaryReader(ios)\r
+ reader=common.BinaryReader(ios)\r
\r
# header\r
signature=reader.unpack("3s", 3)\r
if signature!=b"Pmd":\r
- raise pymeshio.common.ParseException(\r
+ raise common.ParseException(\r
"invalid signature: {0}".format(signature))\r
version=reader.read_float()\r
\r
- model=pymeshio.pmd.Model(version)\r
+ model=pmd.Model(version)\r
reader=Reader(reader.ios, version)\r
if(__read(reader, model)):\r
# check eof\r
\r
# build bone tree\r
for i, child in enumerate(model.bones):\r
+ child.index=i\r
if child.parent_index==0xFFFF:\r
# no parent\r
model.no_parent_bones.append(child)\r