OSDN Git Service
(root)
/
meshio
/
meshio.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
2d6c270
)
fix bone weight.
author
ousttrue
<ousttrue@gmail.com>
Sat, 19 Jun 2010 03:43:39 +0000
(12:43 +0900)
committer
ousttrue
<ousttrue@gmail.com>
Sat, 19 Jun 2010 03:43:39 +0000
(12:43 +0900)
swig/blender/pmd_export.py
patch
|
blob
|
history
diff --git
a/swig/blender/pmd_export.py
b/swig/blender/pmd_export.py
index
d010503
..
567edcf
100644
(file)
--- a/
swig/blender/pmd_export.py
+++ b/
swig/blender/pmd_export.py
@@
-522,7
+522,7
@@
class Bone(object):
return "<Bone %s %d>" % (self.name, self.type)
class BoneBuilder(object):
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={}
def __init__(self):
self.bones=[]
self.boneMap={}
@@
-590,6
+590,20
@@
class BoneBuilder(object):
bl.ikRotationWeight(c)
))
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)
def __checkConnection(self, b, p):
if bl.boneIsConnected(b):
parent=self.__boneByName(p.name)
@@
-598,10
+612,11
@@
class BoneBuilder(object):
for c in b.children:
self.__checkConnection(c, b)
for c in b.children:
self.__checkConnection(c, b)
- def
sortBy(self, boneMap
):
+ def
_sortBy(self
):
"""
boneMap順に並べ替える
"""
"""
boneMap順に並べ替える
"""
+ boneMap=englishmap.boneMap
original=self.bones[:]
def getIndex(bone):
for i, k_v in enumerate(boneMap):
original=self.bones[:]
def getIndex(bone):
for i, k_v in enumerate(boneMap):
@@
-627,7
+642,7
@@
class BoneBuilder(object):
if b.ik_index>0:
b.ik_index=sortMap[b.ik_index]
if b.ik_index>0:
b.ik_index=sortMap[b.ik_index]
- def fix(self):
+ def
_
fix(self):
"""
調整
"""
"""
調整
"""
@@
-654,10
+669,13
@@
class BoneBuilder(object):
assert(false)
def indexByName(self, name):
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):
def __boneByName(self, name):
- return self.bone
s[self.boneMap[name]
]
+ return self.bone
Map[name
]
def __getBone(self, parent, b):
if len(b.children)==0:
def __getBone(self, parent, b):
if len(b.children)==0:
@@
-678,7
+696,7
@@
class BoneBuilder(object):
def __addBone(self, bone):
bone.index=len(self.bones)
self.bones.append(bone)
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):
class PmdExporter(object):
@@
-709,17
+727,6
@@
class PmdExporter(object):
# skeleton
self.builder=BoneBuilder()
self.builder.build(self.armatureObj)
# 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):
############################################################
def __createOneSkinMesh(self, node):
############################################################
@@
-758,8
+765,8
@@
class PmdExporter(object):
v.normal.z=normal[1]
v.uv.x=uv[0]
v.uv.y=uv[1]
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
v.weight0=int(100*weight)
v.edge_flag=0 # edge flag, 0: enable edge, 1: not edge