return "<Bone %s %d>" % (self.name, self.type)
class BoneBuilder(object):
- __slots__=['bones', 'boneMap', 'ik_list']
+ __slots__=['bones', 'boneMap', 'ik_list', ]
def __init__(self):
self.bones=[]
self.boneMap={}
bl.ikRotationWeight(c)
))
+ # boneのsort
+ self._sortBy()
+ self._fix()
+ # IKのsort
+ def getIndex(ik):
+ for i, v in enumerate(englishmap.boneMap):
+ if v[0]==ik.target.name:
+ return i
+ return len(englishmap.boneMap)
+ if isBlender24():
+ self.ik_list.sort(lambda l, r: getIndex(l)-getIndex(r))
+ else:
+ self.ik_list.sort(key=getIndex)
+
def __checkConnection(self, b, p):
if bl.boneIsConnected(b):
parent=self.__boneByName(p.name)
for c in b.children:
self.__checkConnection(c, b)
- def sortBy(self, boneMap):
+ def _sortBy(self):
"""
boneMap順に並べ替える
"""
+ boneMap=englishmap.boneMap
original=self.bones[:]
def getIndex(bone):
for i, k_v in enumerate(boneMap):
if b.ik_index>0:
b.ik_index=sortMap[b.ik_index]
- def fix(self):
+ def _fix(self):
"""
調整
"""
assert(false)
def indexByName(self, name):
- return self.getIndex(self.__boneByName(name))
+ if name=='':
+ return 0
+ else:
+ return self.getIndex(self.__boneByName(name))
def __boneByName(self, name):
- return self.bones[self.boneMap[name]]
+ return self.boneMap[name]
def __getBone(self, parent, b):
if len(b.children)==0:
def __addBone(self, bone):
bone.index=len(self.bones)
self.bones.append(bone)
- self.boneMap[bone.name]=bone.index
+ self.boneMap[bone.name]=bone
class PmdExporter(object):
# skeleton
self.builder=BoneBuilder()
self.builder.build(self.armatureObj)
- self.builder.sortBy(englishmap.boneMap)
- def getIndex(ik):
- for i, v in enumerate(englishmap.boneMap):
- if v[0]==ik.target.name:
- return i
- return len(englishmap.boneMap)
- if isBlender24():
- self.builder.ik_list.sort(lambda l, r: getIndex(l)-getIndex(r))
- else:
- self.builder.ik_list.sort(key=getIndex)
- self.builder.fix()
def __createOneSkinMesh(self, node):
############################################################
v.normal.z=normal[1]
v.uv.x=uv[0]
v.uv.y=uv[1]
- v.bone0=self.builder.boneMap[b0] if b0 in self.builder.boneMap else 0
- v.bone1=self.builder.boneMap[b1] if b1 in self.builder.boneMap else 0
+ v.bone0=self.builder.indexByName(b0)
+ v.bone1=self.builder.indexByName(b1)
v.weight0=int(100*weight)
v.edge_flag=0 # edge flag, 0: enable edge, 1: not edge