X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=blender25-meshio%2Fpymeshio%2Fpmd.py;h=076fc11952131ad72d18d964d77eda5c08d55a60;hb=7c686cc000243203206007b2bcf5a45ca7dee025;hp=f9afcbd04d4e941766813cff828c031939558039;hpb=da885e07471e38f4e4b5da8b3e3ba67a6be4e4b1;p=meshio%2Fpymeshio.git diff --git a/blender25-meshio/pymeshio/pmd.py b/blender25-meshio/pymeshio/pmd.py index f9afcbd..076fc11 100644 --- a/blender25-meshio/pymeshio/pmd.py +++ b/blender25-meshio/pymeshio/pmd.py @@ -7,28 +7,6 @@ from .mmd import * ############################################################################### # 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, @@ -60,8 +38,8 @@ class Material(object): '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, @@ -71,7 +49,7 @@ class Material(object): self.shinness=specular self.ambient=RGBA(ar, ag, ab) self.vertex_count=0 - self._texture='' + self.texture='' self.toon_index=0 self.flag=0 @@ -106,11 +84,11 @@ class Bone(object): '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): @@ -261,11 +239,11 @@ class IK(object): 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'): @@ -287,11 +265,11 @@ class Skin(object): 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' @@ -311,8 +289,8 @@ class RigidBody(object): '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): @@ -327,8 +305,8 @@ class Constraint(object): '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): @@ -343,6 +321,24 @@ class Constraint(object): 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', @@ -354,23 +350,23 @@ class IO(object): '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=[] @@ -379,23 +375,15 @@ class IO(object): 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 @@ -517,7 +505,7 @@ class IO(object): 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)) @@ -606,7 +594,7 @@ class IO(object): 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)) @@ -614,8 +602,8 @@ class IO(object): 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: @@ -781,8 +769,7 @@ class IO(object): 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): @@ -800,7 +787,7 @@ class IO(object): 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])