###############################################################################
# PMD
###############################################################################
-if sys.version_info[0]<3:
- def encode_string(src):
- t=type(src)
- if t==unicode:
- return src.encode('cp932')
- elif t==str:
- return src
- else:
- raise "INVALID str: %s" % t
-
-
-else:
- def encode_string(src):
- t=type(src)
- if t==str:
- return src.encode('cp932')
- elif t==bytes:
- return src
- else:
- raise "INVALID str: %s" % t
-
-
class Vertex(object):
__slots__=['pos', 'normal', 'uv', 'bone0', 'bone1', 'weight0', 'edge_flag']
def __init__(self, x=0, y=0, z=0, nx=0, ny=0, nz=0, u=0, v=0,
'diffuse', 'shinness', 'specular',
'ambient', 'vertex_count', '_texture', 'toon_index', 'flag',
]
- def getTexture(self): return self._texture
- def setTexture(self, texture): self._texture=encode_string(texture)
+ def getTexture(self): return from_str(self._texture)
+ def setTexture(self, texture): self._texture=to_str(texture)
texture=property(getTexture, setTexture)
def __init__(self, dr=0, dg=0, db=0, alpha=1,
self.shinness=specular
self.ambient=RGBA(ar, ag, ab)
self.vertex_count=0
- self._texture=''
+ self.texture=''
self.toon_index=0
self.flag=0
'children', '_english_name', 'ik_index',
'parent_index', 'tail_index', 'tail',
]
- def getName(self): return self._name
- def setName(self, name): self._name=encode_string(name)
+ def getName(self): return from_str(self._name)
+ def setName(self, name): self._name=to_str(name)
name=property(getName, setName)
- def getEnglishName(self): return self._english_name
- def setEnglishName(self, english_name): self._english_name=encode_string(english_name)
+ def getEnglishName(self): return from_str(self._english_name)
+ def setEnglishName(self, english_name): self._english_name=to_str(english_name)
english_name=property(getEnglishName, setEnglishName)
def __init__(self, name='bone', type=0):
class Skin(object):
__slots__=['_name', 'type', 'indices', 'pos_list', '_english_name',
'vertex_count']
- def getName(self): return self._name
- def setName(self, name): self._name=encode_string(name)
+ def getName(self): return from_str(self._name)
+ def setName(self, name): self._name=to_str(name)
name=property(getName, setName)
- def getEnglishName(self): return self._english_name
- def setEnglishName(self, english_name): self._english_name=encode_string(english_name)
+ def getEnglishName(self): return from_str(self._english_name)
+ def setEnglishName(self, english_name): self._english_name=to_str(english_name)
english_name=property(getEnglishName, setEnglishName)
def __init__(self, name='skin'):
class BoneGroup(object):
__slots__=['_name', '_english_name']
- def getName(self): return self._name
- def setName(self, name): self._name=encode_string(name)
+ def getName(self): return from_str(self._name)
+ def setName(self, name): self._name=to_str(name)
name=property(getName, setName)
- def getEnglishName(self): return self._english_name
- def setEnglishName(self, english_name): self._english_name=encode_string(english_name)
+ def getEnglishName(self): return from_str(self._english_name)
+ def setEnglishName(self, english_name): self._english_name=to_str(english_name)
english_name=property(getEnglishName, setEnglishName)
def __init__(self, name='group'): self._name=name; self._english_name='center'
'w', 'h', 'd', 'position', 'rotation', 'weight',
'linearDamping', 'angularDamping', 'restitution', 'friction', 'processType'
]
- def getName(self): return self._name
- def setName(self, name): self._name=encode_string(name)
+ def getName(self): return from_str(self._name)
+ def setName(self, name): self._name=to_str(name)
name=property(getName, setName)
def __init__(self, name):
'constraintRotMin', 'constraintRotMax',
'springPos', 'springRot',
]
- def getName(self): return self._name
- def setName(self, name): self._name=encode_string(name)
+ def getName(self): return from_str(self._name)
+ def setName(self, name): self._name=to_str(name)
name=property(getName, setName)
def __init__(self, name):
self.springRot=Vector3()
+class ToonTextures(object):
+ __slots__=['_toon_textures']
+ def __init__(self):
+ self._toon_textures=[]
+ for i in range(10):
+ self._toon_textures.append('toon%02d.bmp' % (i+1))
+
+ def __getitem__(self, key):
+ return from_str(self._toon_textures[key])
+
+ def __setitem__(self, key, value):
+ self._toon_textures[key]=to_str(value)
+
+ def __iter__(self):
+ for toon_texture in self._toon_textures:
+ yield from_str(toon_texture)
+
+
class IO(object):
__slots__=['io', 'end', 'pos',
'version', '_name', '_comment',
'no_parent_bones',
'rigidbodies', 'constraints',
]
- def getName(self): return self._name
- def setName(self, name): self._name=encode_string(name)
+ def getName(self): return from_str(self._name)
+ def setName(self, name): self._name=to_str(name)
name=property(getName, setName)
- def getEnglishName(self): return self._english_name
- def setEnglishName(self, english_name): self._english_name=encode_string(english_name)
+ def getEnglishName(self): return from_str(self._english_name)
+ def setEnglishName(self, english_name): self._english_name=to_str(english_name)
english_name=property(getEnglishName, setEnglishName)
- def getComment(self): return self._comment
- def setComment(self, comment): self._comment=encode_string(comment)
+ def getComment(self): return from_str(self._comment)
+ def setComment(self, comment): self._comment=to_str(comment)
comment=property(getComment, setComment)
- def getEnglishComment(self): return self._english_comment
- def setEnglishComment(self, english_comment): self._english_comment=encode_string(english_comment)
+ def getEnglishComment(self): return from_str(self._english_comment)
+ def setEnglishComment(self, english_comment): self._english_comment=to_str(english_comment)
english_comment=property(getEnglishComment, setEnglishComment)
def __init__(self):
self.version=1.0
- self.name="default"
- self.comment="default"
+ self.name='default'
+ self.comment='default'
self.english_name='default'
self.english_comment='default'
self.vertices=[]
self.bones=[]
self.ik_list=[]
self.morph_list=[]
-
self.face_list=[]
self.bone_group_list=[]
self.bone_display_list=[]
-
- self.toon_textures=[
- b'toon01.bmp', b'toon02.bmp',
- b'toon03.bmp', b'toon04.bmp',
- b'toon05.bmp', b'toon06.bmp',
- b'toon07.bmp', b'toon08.bmp',
- b'toon09.bmp', b'toon10.bmp',
- ]
-
- self.no_parent_bones=[]
-
+ # extend
+ self.toon_textures=ToonTextures()
self.rigidbodies=[]
self.constraints=[]
+ # innner use
+ self.no_parent_bones=[]
def each_vertex(self): return self.vertices
def getUV(self, i): return self.vertices[i].uv
if not io:
return False
# Header
- io.write(b"Pmd")
+ io.write(b"Pmd")
io.write(struct.pack("f", self.version))
io.write(struct.pack("20s", self.name))
io.write(struct.pack("256s", self.comment))
io.write(struct.pack("=20s", bone.english_name))
# english skin list
for skin in self.morph_list:
- print(skin.name)
+ #print(skin.name)
if skin.name==b'base':
continue
io.write(struct.pack("=20s", skin.english_name))
for bone_group in self.bone_group_list:
io.write(struct.pack("50s", bone_group.english_name))
# toon texture
- for i in range(10):
- io.write(struct.pack("=100s", self.toon_textures[i]))
+ for toon_texture in self.toon_textures:
+ io.write(struct.pack("=100s", toon_texture))
# rigid
io.write(struct.pack("I", len(self.rigidbodies)))
for r in self.rigidbodies:
100bytex10
"""
for i in range(10):
- self.toon_textures.append(
- truncate_zero(struct.unpack("100s", self.io.read(100))[0]))
+ self.toon_textures[i]=truncate_zero(struct.unpack("100s", self.io.read(100))[0])
return True
def loadEnglishName(self):
self._check_position()
# english skin list
for skin in self.morph_list:
- if skin.name=='base':
+ if skin.name==b'base':
continue
english_name=truncate_zero(
struct.unpack("20s", self.io.read(20))[0])