def resetObj(obj, update=None, calcNorm=None): """ This function resets the positions of the vertices of an object to their original base positions. Parameters ---------- obj: *3D object*. The object whose vertices are to be reset. update: *int*. An indicator to control whether to call the vectors update method. calcNorm: *int*. An indicator to control whether or not the normals should be recalculated """ originalVerts = files3d.loadVertsCoo(obj.path) for (i, v) in enumerate(obj.verts): v.co[0] = originalVerts[i][0] v.co[1] = originalVerts[i][1] v.co[2] = originalVerts[i][2] if update: v.update() if calcNorm: obj.calcNormals()
def saveTranslationTarget(obj, targetPath, groupToSave=None, epsilon=0.001): """ This function analyses an object to determine the differences between the current set of vertices and the vertices contained in the *originalVerts* list, writing the differences out to disk as a morphing target file. Parameters ---------- obj: *3d object*. The object from which the current set of vertices is to be determined. originalVerts: *list of list*. The positions of vertices in the base reference mesh. This is a list of 3 coordinates of the form: [[x1,y1,z1],[x2,y2,z2],[x3,y3,z3],...[xn,yn,zn]] targetPath: *string*. The file system path to the output file into which the morphing targets will be written. groupToSave: *faceGroup*. It's possible to save only the changes made to a specific part of the mesh object by indicating the face group to save. epsilon: *float*. The distance that a vertex has to have been moved for it to be considered 'moved' by this function. The difference between the original vertex position and the current vertex position is compared to this value. If that difference is greater than the value of epsilon, the vertex is considered to have been modified and will be saved in the output file as a morph target. """ modifiedFacesIndices = {} modifiedVertsIndices = [] originalVerts = files3d.loadVertsCoo(obj.path) if not groupToSave: vertsToSave = xrange(len(obj.verts)) else: pass # TODO verts from group objVerts = obj.verts nVertsExported = 0 if objVerts: for index in vertsToSave: originalVertex = originalVerts[index] targetVertex = objVerts[index] sharedFaces = obj.verts[index].sharedFaces delta = aljabr.vsub(targetVertex.co, originalVertex) dist = aljabr.vdist(originalVertex, targetVertex.co) if dist > epsilon: nVertsExported += 1 dataToExport = [index, delta[0], delta[1], delta[2]] modifiedVertsIndices.append(dataToExport) # for f in sharedFaces: # modifiedFacesIndices[f.idx] = f.idx try: fileDescriptor = open(targetPath, 'w') except: print 'Unable to open %s'%(targetPath) return None # for fidx in modifiedFacesIndices.values(): # fileDescriptor.write("%i " % (fidx)) # fileDescriptor.write("\n") for data in modifiedVertsIndices: fileDescriptor.write('%d %f %f %f\n' % (data[0], data[1], data[2], data[3])) fileDescriptor.close() if nVertsExported == 0: print 'Warning%t|Zero verts exported in file ' + targetPath