from geometry import Vertex, Edge, Face, Polygon def cube(): """ This function returns a populated Polygon object. The object is a cube with a vertex at the origin, and another at (1, 1, 1). v4 v5 *-----e8-----* | | | | e|4 f4 e|5 | | v4 v|0 v|1 v5 *-----e4-----*-----e0-----*-----e5-----* | | | | | | | | e11| f3 e|3 f0 e|1 f1 e|9 | | | | | | | | *-----e7-----*-----e2-----*-----e6-----* v7 v|3 v|2 v6 | | e|7 f2 e|6 | | v|7 v|6 *-----e10----* | | | | e|11 f5 e|9 | | | | *-----e8-----* v4 v5 v0 - <0,1,0> v1 - <1,1,0> v2 - <1,0,0> v3 - <0,0,0> v4 - <0,1,1> v5 - <1,1,1> v6 - <1,0,1> v7 - <0,0,1> face list f0 - e0, e1, e2, e3 f1 - e1, e5, e9, e6 f2 - e2, e6, e10, e7 f3 - e4, e3, e7, e11 f4 - e8, e5, e0, e4 f5 - e10, e9, e8, e11 winged edges ordered by face, then by vertex reference edge list e0 - v0, v1; f0, f4; e3, e1, e4, e5 e1 - v1, v2; f0, f1; e0, e2, e5, e6 e2 - v3, v2; f0, f2; e3, e7, e1, e6 e3 - v0, v3; f3, f0; e4, e7, e0, e2 e4 - v4, v0; f3, f4; e11, e3, e0 e8 e5 - v5, v1; f4, f1; e8, e0, e9, e1 e6 - v2, v6; f1, f2; e1, e9, e2, e10 e7 - v7, v3; f3, f2; e11, e3, e10, e2 e8 - v4, v5, f4, f5; e4, e5, e11, e9 e9 - v5, v6; f1, f5; e5, e6, e8, e10 e10 - v7, v6; f2, f5; e7, e6, e11, e9 e11 - v4, v7; f3, f5; e4, e7, e8, 10 vertex list v0 - e0, e3, e4 v1 - e0, e5, e1 v2 - e1, e6, e2 v3 - e2, e7, e3 v4 - e4, e11, e8 v5 - e5, e9, e8 v6 - e2, e9, e10 v7 - e7, e10, e11 """ p = Polygon() p.vertices.append(Vertex(p, 1.0, 1.0, 0.0)) p.vertices.append(Vertex(p, 1.0, 0.0, 0.0)) p.vertices.append(Vertex(p, 0.0, 1.0, 0.0)) p.vertices.append(Vertex(p, 0.0, 0.0, 0.0)) p.vertices.append(Vertex(p, 0.0, 1.0, 1.0)) p.vertices.append(Vertex(p, 1.0, 1.0, 1.0)) p.vertices.append(Vertex(p, 1.0, 0.0, 1.0)) p.vertices.append(Vertex(p, 0.0, 0.0, 1.0)) p.edges.append(Edge(p)) p.edges.append(Edge(p)) p.edges.append(Edge(p)) p.edges.append(Edge(p)) p.edges.append(Edge(p)) p.edges.append(Edge(p)) p.edges.append(Edge(p)) p.edges.append(Edge(p)) p.edges.append(Edge(p)) p.edges.append(Edge(p)) p.edges.append(Edge(p)) p.edges.append(Edge(p)) p.faces.append(Face(p)) p.faces.append(Face(p)) p.faces.append(Face(p)) p.faces.append(Face(p)) p.faces.append(Face(p)) p.faces.append(Face(p)) p.vertices[0].edges = [0, 3, 4] p.vertices[1].edges = [0, 5, 1] p.vertices[2].edges = [1, 6, 2] p.vertices[3].edges = [2, 7, 3] p.vertices[4].edges = [4, 11, 8] p.vertices[5].edges = [5, 9, 8] p.vertices[6].edges = [6, 9, 10] p.vertices[7].edges = [7, 10, 11] # face list p.faces[0].edges = [0, 1, 2, 3] p.faces[1].edges = [1, 5, 9, 6] p.faces[2].edges = [2, 6, 10, 7] p.faces[3].edges = [4, 3, 7, 11] p.faces[4].edges = [8, 5, 0, 4] p.faces[5].edges = [10, 9, 8, 11] #winged edges ordered by face, then by vertex reference p.edges[0].vertices = [0, 1] p.edges[1].vertices = [1, 2] p.edges[2].vertices = [2, 3] p.edges[3].vertices = [3, 0] p.edges[4].vertices = [0, 4] p.edges[5].vertices = [5, 1] p.edges[6].vertices = [2, 6] p.edges[7].vertices = [7, 3] p.edges[8].vertices = [4, 5] p.edges[9].vertices = [5, 6] p.edges[10].vertices = [7, 6] p.edges[11].vertices = [4, 7] p.edges[0].edges = [3, 1, 4, 5] p.edges[1].edges = [0, 2, 5, 6] p.edges[2].edges = [1, 3, 6, 7] p.edges[3].edges = [4, 7, 0, 2] p.edges[4].edges = [11, 3, 0, 8] p.edges[5].edges = [8, 0, 9, 1] p.edges[6].edges = [1, 9, 2, 10] p.edges[7].edges = [11, 3, 10, 2] p.edges[8].edges = [4, 5, 11, 9] p.edges[9].edges = [5, 6, 8, 10] p.edges[10].edges = [7, 6, 11, 9] p.edges[11].edges = [4, 7, 8, 10] p.edges[0].faces = [0, 4] p.edges[1].faces = [0, 1] p.edges[2].faces = [0, 2] p.edges[3].faces = [3, 0] p.edges[4].faces = [3, 4] p.edges[5].faces = [4, 1] p.edges[6].faces = [1, 2] p.edges[7].faces = [3, 2] p.edges[8].faces = [4, 5] p.edges[9].faces = [1, 5] p.edges[10].faces = [2, 5] p.edges[11].faces = [3, 5] # Polygon stores all the actual data. # Every other class only stores indices to # the original data. This could be slightly # dangerous if any items get appended to the # list of objects or the indices get changed. # These are all the same vertex, just testing to make # sure I did it right. print p.vertices[1].x edge_v_id = p.edges[1].vertices[0] print p.vertices[edge_v_id].x face_edge_id = p.faces[0].edges[1] edge_v_id = p.edges[face_edge_id].vertices[0] print p.vertices[edge_v_id].x return p print cube()