def getElements(node): obj = node.GetObject() objTriMesh = obj.AsTriObject() objMesh = objTriMesh.GetMesh() numVerts = objMesh.GetNumVertices() numFaces = objMesh.GetNumFaces() allElements = [] faces = MaxPlus.BitArray(numFaces) faces.SetAll() verts = [[] for i in range(numVerts)] for i in range(0, numFaces): face = objMesh.GetFace(i) for k in range(0, 3): verts[face.GetVert(k)].append(i) for i in range(0, numFaces): if faces[i]: element = [] element.append(i) faceBits = MaxPlus.BitArray(numFaces) vertBits = MaxPlus.BitArray(numVerts) #for j in range(0, len(element)): j = 0 while j < len(element): fi = element[j] j += 1 if not faceBits[fi]: face = objMesh.GetFace(fi) for k in range(0, 3): v = face.GetVert(k) if vertBits[v]: continue for singleFace in range(0, len(verts[v])): element.append(verts[v][singleFace]) vertBits.Set(v, True) faceBits.Set(fi, True) faces.Clear(fi) allElements.append(MaxPlus.BitArray(faceBits)) return allElements
def compare_mesh_vert_pos(self, src, target): src_mesh = self.get_mesh_from_node(src) target_mesh = self.get_mesh_from_node(target) ba_bad_verts = MaxPlus.BitArray() ba_bad_verts.SetSize(target_mesh.GetNumVertices()) print "{0} with {1}".format(target.Name, src.Name) for t in xrange(target_mesh.GetNumVertices()): distances = [] for s in xrange(src_mesh.GetNumVertices()): _distance = self.distance(target_mesh.GetVertex(t), src_mesh.GetVertex(s)) # Check if Distance is lower than Tolerance distances.append(_distance < self.tolerance) # index of non-existent item in list returns ValueError try: idx = distances.index(True) except ValueError: # Pos Mismatch / Bad Verts ba_bad_verts.Set(t, True) return ba_bad_verts