def Load(fileName): Model = os.path.join(os.path.dirname(__file__), fileName) scene = pyassimp.load(Model) newModel = Mesh() for index, mesh in enumerate(scene.meshes): #On suppose qu'il n'y a qu'un mesh par fichier, la fonction ne renvoyant qu'un mesh for index, vertices in enumerate(mesh.vertices): newModel.m_vertices.insert(index, vector3(vertices[0],vertices[1],vertices[2])) for index, face in enumerate(mesh.faces): newModel.m_faces.insert(index, vector3(face.indices[0],face.indices[1],face.indices[2])) for index, normal in enumerate(mesh.normals): newModel.m_normals.insert(index, vector3(normal[0],normal[1],normal[2])) pyassimp.release(scene) return newModel
def __init__(self): self.m_p = 4 * [vector3()] self.m_q = 4 * [vector3()] self.m_det = 16 * [0] for i in range(len(self.m_det)): self.m_det[i] = 4 * [0] self.m_edge = 4 * [0] for i in range(len(self.m_edge)): self.m_edge[i] = 4 * [0] self.m_y = 4 * [vector3()] self.m_bits = 0x0 self.m_allBits = 0x0 self.m_last = 0 self.m_lastBit = 0x0
def compute_vector(self, subset): v = vector3() temp = 0 bit = 0x1 for i in range(4): if(self.contains(bit, subset)): v += self.m_y[i] * self.m_det[subset][i] temp += self.m_det[subset][i] bit <<= 1 assert temp > 0 return v * (1 / temp)
def Minkowski(mesh1, mesh2): vertices1 = mesh1.m_vertices normal1 = mesh1.m_normals vertices2 = mesh2.m_vertices faces2 = mesh2.m_faces normal2 = mesh2.m_normals newMesh = Mesh() for i1, point1 in enumerate(vertices1): for i2, face in enumerate(faces2): newMesh.m_vertices.insert((i1+1)*i2*3, vertices1[i1] - vertices2[face.x]) newMesh.m_vertices.insert((i1+1)*i2*3+1, vertices1[i1] - vertices2[face.y]) newMesh.m_vertices.insert((i1+1)*i2*3+2, vertices1[i1] - vertices2[face.z]) newMesh.m_normals.insert((i1+1)*i2*3,normal2[face.x]*-1) newMesh.m_normals.insert((i1+1)*i2*3+1,normal2[face.x]*-1) newMesh.m_normals.insert((i1+1)*i2*3+2,normal2[face.x]*-1) newMesh.m_faces.insert((i1+1)*i2, vector3((i1+1)*i2*3, (i1+1)*i2*3+1, (i1+1)*i2*3+2)) return newMesh