179 lines
5.3 KiB
Python
179 lines
5.3 KiB
Python
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()
|
|
|
|
# setup vertices
|
|
p.vertices = [
|
|
Vertex(p, 0, 1.0, 1.0, 0.0),
|
|
Vertex(p, 1, 1.0, 0.0, 0.0),
|
|
Vertex(p, 2, 0.0, 1.0, 0.0),
|
|
Vertex(p, 3, 0.0, 0.0, 0.0),
|
|
Vertex(p, 4, 0.0, 1.0, 1.0),
|
|
Vertex(p, 5, 1.0, 1.0, 1.0),
|
|
Vertex(p, 6, 1.0, 0.0, 1.0),
|
|
Vertex(p, 7, 0.0, 0.0, 1.0)]
|
|
|
|
p.vertices[0].edge_ids = [0, 3, 4]
|
|
p.vertices[1].edge_ids = [0, 5, 1]
|
|
p.vertices[2].edge_ids = [1, 6, 2]
|
|
p.vertices[3].edge_ids = [2, 7, 3]
|
|
p.vertices[4].edge_ids = [4, 11, 8]
|
|
p.vertices[5].edge_ids = [5, 9, 8]
|
|
p.vertices[6].edge_ids = [6, 9, 10]
|
|
p.vertices[7].edge_ids = [7, 10, 11]
|
|
|
|
# setup edges
|
|
p.edges = [Edge(p, i) for i in range(12)]
|
|
|
|
# winged edges ordered by face, then by vertex reference
|
|
# setup edge end vertex ids
|
|
p.edges[0].vertex_ids = [0, 1]
|
|
p.edges[1].vertex_ids = [1, 2]
|
|
p.edges[2].vertex_ids = [2, 3]
|
|
p.edges[3].vertex_ids = [3, 0]
|
|
p.edges[4].vertex_ids = [0, 4]
|
|
p.edges[5].vertex_ids = [5, 1]
|
|
p.edges[6].vertex_ids = [2, 6]
|
|
p.edges[7].vertex_ids = [7, 3]
|
|
p.edges[8].vertex_ids = [4, 5]
|
|
p.edges[9].vertex_ids = [5, 6]
|
|
p.edges[10].vertex_ids = [7, 6]
|
|
p.edges[11].vertex_ids = [4, 7]
|
|
|
|
# setup edges winged edge ids
|
|
p.edges[0].edge_ids = [3, 1, 4, 5]
|
|
p.edges[1].edge_ids = [0, 2, 5, 6]
|
|
p.edges[2].edge_ids = [1, 3, 6, 7]
|
|
p.edges[3].edge_ids = [4, 7, 0, 2]
|
|
p.edges[4].edge_ids = [11, 3, 0, 8]
|
|
p.edges[5].edge_ids = [8, 0, 9, 1]
|
|
p.edges[6].edge_ids = [1, 9, 2, 10]
|
|
p.edges[7].edge_ids = [11, 3, 10, 2]
|
|
p.edges[8].edge_ids = [4, 5, 11, 9]
|
|
p.edges[9].edge_ids = [5, 6, 8, 10]
|
|
p.edges[10].edge_ids = [7, 6, 11, 9]
|
|
p.edges[11].edge_ids = [4, 7, 8, 10]
|
|
|
|
# setup edge adjacent face ids
|
|
p.edges[0].face_ids = [0, 4]
|
|
p.edges[1].face_ids = [0, 1]
|
|
p.edges[2].face_ids = [0, 2]
|
|
p.edges[3].face_ids = [3, 0]
|
|
p.edges[4].face_ids = [3, 4]
|
|
p.edges[5].face_ids = [4, 1]
|
|
p.edges[6].face_ids = [1, 2]
|
|
p.edges[7].face_ids = [3, 2]
|
|
p.edges[8].face_ids = [4, 5]
|
|
p.edges[9].face_ids = [1, 5]
|
|
p.edges[10].face_ids = [2, 5]
|
|
p.edges[11].face_ids = [3, 5]
|
|
|
|
# setup faces
|
|
p.faces = [Face(p, i) for i in range(6)]
|
|
|
|
# setup face edge ids
|
|
p.faces[0].edge_ids = [0, 1, 2, 3]
|
|
p.faces[1].edge_ids = [1, 5, 9, 6]
|
|
p.faces[2].edge_ids = [2, 6, 10, 7]
|
|
p.faces[3].edge_ids = [4, 3, 7, 11]
|
|
p.faces[4].edge_ids = [8, 5, 0, 4]
|
|
p.faces[5].edge_ids = [10, 9, 8, 11]
|
|
|
|
# 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].vertex_ids[0]
|
|
# print p.vertices[edge_v_id].x
|
|
|
|
# face_edge_id = p.faces[0].edge_ids[1]
|
|
# edge_v_id = p.edges[face_edge_id].vertex_ids[0]
|
|
# print p.vertices[edge_v_id].x
|
|
|
|
return p
|
|
|
|
# print cube()
|