def __hash__(self):
#return int((self.x+self.y+self.z+self.nx+self.ny+self.nz+self.u+self.v)*100)
- return int((self.x+self.y+self.z)*100)
+ #return int((self.x+self.y+self.z)*100)
+ return self.index*100+self.obj
def __eq__(self, rhs):
#return near(self.x, rhs.x) and near(self.y, rhs.y) and near(self.z, rhs.z) and near(self.nx, rhs.nx) and near(self.ny, rhs.ny) and near(self.nz, rhs.nz) and near(self.u, rhs.u) and near(self.v, rhs.v)
"""
頂点配列
"""
+ __slots__=[
+ 'indexArrays',
+ 'vertices',
+ 'normals',
+ 'uvs',
+ 'b0', 'b1', 'weight',
+ 'vertexMap',
+ 'objectMap',
+ ]
def __init__(self):
# マテリアル毎に分割したインデックス配列
self.indexArrays={}
self.weight=[]
self.vertexMap={}
- self.indexMap={}
+ #self.indexMap={}
+ self.objectMap={}
def __str__(self):
return "<VertexArray %d vertices, %d indexArrays>" % (
self.weight.append(weight0)
# indexのマッピングを保存する
- if not base_index in self.indexMap:
- self.indexMap[base_index]=set()
- self.indexMap[base_index].add(index)
+ #if not base_index in self.indexMap:
+ # self.indexMap[base_index]=set()
+ #self.indexMap[base_index].add(index)
assert(index<=65535)
return index
- def getMappedIndices(self, base_index):
+ def getMappedIndex(self, obj_name, base_index):
+ key=VertexKey(
+ self.objectMap[obj_name], base_index,
+ None, None, None,
+ None, None, None,
+ None, None)
+ return self.vertexMap[key]
+
+ def getMappedIndices(self, obj, base_index):
return self.indexMap[base_index]
def addTriangle(self,
- obj, material,
+ object_name, material,
base_index0, base_index1, base_index2,
pos0, pos1, pos2,
n0, n1, n2,
b1_0, b1_1, b1_2,
weight0, weight1, weight2
):
+ if object_name in self.objectMap:
+ obj=self.objectMap[object_name]
+ else:
+ obj=len(self.objectMap)
+ self.objectMap[object_name]=obj
index0=self.__getIndex(obj, base_index0, pos0, n0, uv0, b0_0, b1_0, weight0)
index1=self.__getIndex(obj, base_index1, pos1, n1, uv1, b0_1, b1_1, weight1)
index2=self.__getIndex(obj, base_index2, pos2, n2, uv2, b0_2, b1_2, weight2)
class OneSkinMesh(object):
- __slots__=['obj_index', 'scene', 'vertexArray', 'morphList',
+ __slots__=['scene', 'vertexArray', 'morphList',
'rigidbodies',
'constraints',
]
self.rigidbodies=[]
self.constraints=[]
self.scene=scene
- self.obj_index=0
def __str__(self):
return "<OneSkinMesh %s, morph:%d>" % (
return weightMap, secondWeightMap
- def __processFaces(self, mesh, weightMap, secondWeightMap):
+ def __processFaces(self, obj_name, mesh, weightMap, secondWeightMap):
# 各面の処理
for i, face in enumerate(mesh.faces):
faceVertexCount=bl.face.getVertexCount(face)
if faceVertexCount==3:
# triangle
self.vertexArray.addTriangle(
- self.obj_index, material.name,
+ obj_name, material.name,
v[2].index,
v[1].index,
v[0].index,
elif faceVertexCount==4:
# quadrangle
self.vertexArray.addTriangle(
- self.obj_index, material.name,
+ obj_name, material.name,
v[2].index,
v[1].index,
v[0].index,
weightMap[v[0].index][1]
)
self.vertexArray.addTriangle(
- self.obj_index, material.name,
+ obj_name, material.name,
v[0].index,
v[3].index,
v[2].index,
print(m.tpye)
weightMap, secondWeightMap=self.__getWeightMap(copyObj, copyMesh)
- self.__processFaces(copyMesh, weightMap, secondWeightMap)
+ self.__processFaces(obj.name, copyMesh, weightMap, secondWeightMap)
bl.object.delete(copyObj)
- self.obj_index+=1
def createEmptyBasicSkin(self):
self.__getOrCreateMorph('base', 0)
for index in vg:
v=bl.shapekey.getByIndex(b, index)
pos=[v[0], v[1], v[2]]
- indices=self.vertexArray.getMappedIndices(index)
- for i in indices:
- if i in used:
- continue
- used.add(i)
-
- baseMorph.add(i, pos)
- indexRelativeMap[i]=relativeIndex
- relativeIndex+=1
+ i=self.vertexArray.getMappedIndex(obj.name, index)
+ baseMorph.add(i, pos)
+ indexRelativeMap[i]=relativeIndex
+ relativeIndex+=1
+ #indices=self.vertexArray.getMappedIndices(index)
+ #for i in indices:
+ # if i in used:
+ # continue
+ # used.add(i)
+
+ # baseMorph.add(i, pos)
+ # indexRelativeMap[i]=relativeIndex
+ # relativeIndex+=1
break
assert(basis)
if offset[0]==0 and offset[1]==0 and offset[2]==0:
continue
if index in vg:
- indices=self.vertexArray.getMappedIndices(index)
- for i in indices:
- if i in used:
- continue
- used.add(i)
- morph.add(indexRelativeMap[i], offset)
+ i=self.vertexArray.getMappedIndex(obj.name, index)
+ if i in used:
+ continue
+ used.add(i)
+ morph.add(indexRelativeMap[i], offset)
+ #indices=self.vertexArray.getMappedIndices(index)
+ #for i in indices:
+ # if i in used:
+ # continue
+ # used.add(i)
+ # morph.add(indexRelativeMap[i], offset)
+ assert(len(morph.offsets)<len(baseMorph.offsets))
# sort skinmap
original=self.morphList[:]