diff --git a/source/tools/glexemel/g3d_support_b290.py b/source/tools/glexemel/g3d_support_b290.py index 281d7779..8aa78619 100644 --- a/source/tools/glexemel/g3d_support_b290.py +++ b/source/tools/glexemel/g3d_support_b290.py @@ -398,20 +398,21 @@ def createMesh(filename, header, data, toblender, operator): # different values in any frame. That could still cause problems. # Figure out a better solution :p (e.g. moving verts to random # different positions). + # (We tried putting the verts in a line, to prevent merging. + # This was a problem because there are some verts that need merging.) header_most_diff = 0 # This is the header we will use to define the mesh. - n_max_diff = 0 # Max number of "different" vertices found in a frame so far. + n_max_diff = 0 # Max number of "different" vertices found in the frame. for x in range(0, header.framecount): n_diff_verts = 0 # Current number of "different" vertices. # Find nubmer of different verts + diff_verts = set() + n_diff_verts = 0 for i in range(0, header.vertexcount * 3, 3): - vert_cmp = data.vertices[x * header.vertexcount * 3 + i:x * header.vertexcount * 3 + i + 3] - vert_diff = True - for j in range(i + 3, header.vertexcount * 3, 3): - if (data.vertices[x * header.vertexcount * 3 + j:x * header.vertexcount * 3 + j + 3] == vert_cmp): - vert_diff = False - break - n_diff_verts += vert_diff - + vert = tuple(data.vertices[x * header.vertexcount * 3 + i:x * header.vertexcount * 3 + i + 3]) + if (vert not in diff_verts): + n_diff_verts += 1 + diff_verts.add(vert) + if n_diff_verts == header.vertexcount: # if we've found a frame where all the verts are different, we don't need to do anymore searching. header_most_diff = x @@ -423,12 +424,12 @@ def createMesh(filename, header, data, toblender, operator): # the previous match, this frame is the new max. n_max_diff = n_diff_verts header_most_diff = x - + # Get the Vertices and Normals into empty Mesh for x in range(0, header.vertexcount * 3, 3): vertsCO.append(tuple(data.vertices[header_most_diff*header.vertexcount*3+x:header_most_diff*header.vertexcount*3+x+3])) vertsNormal.extend([(data.normals[x], data.normals[x + 1], - data.normals[x + 2])]) + data.normals[x + 2])]) faces = [] faceuv = [] @@ -548,7 +549,7 @@ def createMesh(filename, header, data, toblender, operator): # activate one shapekey per frame for i in range(0, header.framecount): - shape = mesh.shape_keys.key_blocks[i] + shape = mesh.shape_keys.key_blocks[i+1] shape.value = 0.0 shape.keyframe_insert("value", frame=i) shape.value = 1.0