simple plotting to see if it works.
This commit is contained in:
parent
c6434469fb
commit
a93c047a5d
207
geometry.py
207
geometry.py
@ -246,13 +246,11 @@ class Polygon(object):
|
||||
it needs to average vertices with all adjoinging faces
|
||||
'''
|
||||
|
||||
def __init__(self, vertices, edges, faces):
|
||||
self.vertices = vertices
|
||||
self.edges = edges
|
||||
self.faces = faces
|
||||
def __init__(self):
|
||||
self.vertices = []
|
||||
self.edges = []
|
||||
self.faces = []
|
||||
|
||||
def __repr__(self):
|
||||
return str([edge for edge in self.edges])
|
||||
def catmullClarkRefine(self):
|
||||
'''
|
||||
For each face, add a face vertex
|
||||
@ -264,123 +262,132 @@ class Polygon(object):
|
||||
'''
|
||||
|
||||
# each face knows how to subdivide and create a set of subfaces, including interior edges and setup their references correctly... <- not completely finished...
|
||||
|
||||
p = Polygon()
|
||||
edges = []
|
||||
vertices = []
|
||||
faces = []
|
||||
for face in self.faces:
|
||||
for subFace in face.subFaces:
|
||||
faces.append(subFace)
|
||||
for edge in subFace.edges:
|
||||
edges.append(edge)
|
||||
for vertex in edge.vertices:
|
||||
print vertex
|
||||
|
||||
vertices.append(vertex)
|
||||
p.faces = faces
|
||||
p.vertices = vertices
|
||||
p.edges = edges
|
||||
# plotting these in excel seems to show the correct values (at first glace...)
|
||||
|
||||
|
||||
# so now what.........
|
||||
|
||||
# so now what.........
|
||||
# (F + 2R + (n-3) P) / n
|
||||
#
|
||||
# F = average of all face vertices touching P
|
||||
# R = average of all edge vertices touching P
|
||||
# P original point
|
||||
# n = face vertices or edge vertices (should be the same number)
|
||||
|
||||
|
||||
v = []
|
||||
v.append(Vertex(0.0, 1.0, 0.0))
|
||||
v.append(Vertex(1.0, 1.0, 0.0))
|
||||
v.append(Vertex(1.0, 0.0, 0.0))
|
||||
v.append(Vertex(0.0, 0.0, 0.0))
|
||||
v.append(Vertex(0.0, 1.0, 1.0))
|
||||
v.append(Vertex(1.0, 1.0, 1.0))
|
||||
v.append(Vertex(1.0, 0.0, 1.0))
|
||||
v.append(Vertex(0.0, 0.0, 1.0))
|
||||
return p
|
||||
|
||||
e = []
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
def createPolygon():
|
||||
v = []
|
||||
v.append(Vertex(0.0, 1.0, 0.0))
|
||||
v.append(Vertex(1.0, 1.0, 0.0))
|
||||
v.append(Vertex(1.0, 0.0, 0.0))
|
||||
v.append(Vertex(0.0, 0.0, 0.0))
|
||||
v.append(Vertex(0.0, 1.0, 1.0))
|
||||
v.append(Vertex(1.0, 1.0, 1.0))
|
||||
v.append(Vertex(1.0, 0.0, 1.0))
|
||||
v.append(Vertex(0.0, 0.0, 1.0))
|
||||
|
||||
f = []
|
||||
f.append(Face())
|
||||
f.append(Face())
|
||||
f.append(Face())
|
||||
f.append(Face())
|
||||
f.append(Face())
|
||||
f.append(Face())
|
||||
e = []
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
e.append(Edge())
|
||||
|
||||
# vertex list
|
||||
v[0].edges = [e[0], e[3], e[4]]
|
||||
v[1].edges = [e[0], e[5], e[1]]
|
||||
v[2].edges = [e[1], e[6], e[2]]
|
||||
v[3].edges = [e[2], e[7], e[3]]
|
||||
v[4].edges = [e[4], e[11], e[8]]
|
||||
v[5].edges = [e[5], e[9], e[8]]
|
||||
v[6].edges = [e[2], e[9], e[10]]
|
||||
v[7].edges = [e[7], e[10], e[11]]
|
||||
f = []
|
||||
f.append(Face())
|
||||
f.append(Face())
|
||||
f.append(Face())
|
||||
f.append(Face())
|
||||
f.append(Face())
|
||||
f.append(Face())
|
||||
|
||||
# face list
|
||||
f[0].edges = [e[0], e[1], e[2], e[3]]
|
||||
f[1].edges = [e[1], e[5], e[9], e[6]]
|
||||
f[2].edges = [e[2], e[6], e[10], e[7]]
|
||||
f[3].edges = [e[4], e[3], e[7], e[11]]
|
||||
f[4].edges = [e[8], e[5], e[0], e[4]]
|
||||
f[5].edges = [e[10], e[9], e[8], e[11]]
|
||||
# vertex list
|
||||
v[0].edges = [e[0], e[3], e[4]]
|
||||
v[1].edges = [e[0], e[5], e[1]]
|
||||
v[2].edges = [e[1], e[6], e[2]]
|
||||
v[3].edges = [e[2], e[7], e[3]]
|
||||
v[4].edges = [e[4], e[11], e[8]]
|
||||
v[5].edges = [e[5], e[9], e[8]]
|
||||
v[6].edges = [e[2], e[9], e[10]]
|
||||
v[7].edges = [e[7], e[10], e[11]]
|
||||
|
||||
#winged edges ordered by face, then by vertex reference
|
||||
e[0].vertices, e[0].faces, e[0].edges = [v[0], v[1]], [f[0], f[4]], [e[3], e[1], e[4], e[5]]
|
||||
e[1].vertices, e[1].faces, e[1].edges = [v[1], v[2]], [f[0], f[1]], [e[0], e[2], e[5], e[6]]
|
||||
e[2].vertices, e[2].faces, e[2].edges = [v[2], v[3]], [f[0], f[2]], [e[3], e[7], e[1], e[6]]
|
||||
e[3].vertices, e[3].faces, e[3].edges = [v[3], v[0]], [f[3], f[0]], [e[4], e[7], e[0], e[2]]
|
||||
e[4].vertices, e[4].faces, e[4].edges = [v[0], v[4]], [f[3], f[4]], [e[11], e[3], e[0], e[8]]
|
||||
e[5].vertices, e[5].faces, e[5].edges = [v[5], v[1]], [f[4], f[1]], [e[8], e[0], e[9], e[1]]
|
||||
e[6].vertices, e[6].faces, e[6].edges = [v[2], v[6]], [f[1], f[2]], [e[1], e[9], e[2], e[10]]
|
||||
e[7].vertices, e[7].faces, e[7].edges = [v[7], v[3]], [f[3], f[2]], [e[11], e[3], e[10], e[2]]
|
||||
e[8].vertices, e[8].faces, e[8].edges = [v[4], v[5]], [f[4], f[5]], [e[4], e[5], e[11], e[9]]
|
||||
e[9].vertices, e[9].faces, e[9].edges = [v[5], v[6]], [f[1], f[5]], [e[5], e[6], e[8], e[10]]
|
||||
e[10].vertices, e[10].faces, e[10].edges = [v[7], v[6]], [f[2], f[5]], [e[7], e[6], e[11], e[9]]
|
||||
e[11].vertices, e[11].faces, e[11].edges = [v[4], v[7]], [f[3], f[5]], [e[4], e[7], e[8], e[10]]
|
||||
# face list
|
||||
f[0].edges = [e[0], e[1], e[2], e[3]]
|
||||
f[1].edges = [e[1], e[5], e[9], e[6]]
|
||||
f[2].edges = [e[2], e[6], e[10], e[7]]
|
||||
f[3].edges = [e[4], e[3], e[7], e[11]]
|
||||
f[4].edges = [e[8], e[5], e[0], e[4]]
|
||||
f[5].edges = [e[10], e[9], e[8], e[11]]
|
||||
|
||||
# just to prove to myself that the objects are the same, this is what years of pass by value have done to me...
|
||||
#winged edges ordered by face, then by vertex reference
|
||||
e[0].vertices, e[0].faces, e[0].edges = [v[0], v[1]], [f[0], f[4]], [e[3], e[1], e[4], e[5]]
|
||||
e[1].vertices, e[1].faces, e[1].edges = [v[1], v[2]], [f[0], f[1]], [e[0], e[2], e[5], e[6]]
|
||||
e[2].vertices, e[2].faces, e[2].edges = [v[2], v[3]], [f[0], f[2]], [e[3], e[7], e[1], e[6]]
|
||||
e[3].vertices, e[3].faces, e[3].edges = [v[3], v[0]], [f[3], f[0]], [e[4], e[7], e[0], e[2]]
|
||||
e[4].vertices, e[4].faces, e[4].edges = [v[0], v[4]], [f[3], f[4]], [e[11], e[3], e[0], e[8]]
|
||||
e[5].vertices, e[5].faces, e[5].edges = [v[5], v[1]], [f[4], f[1]], [e[8], e[0], e[9], e[1]]
|
||||
e[6].vertices, e[6].faces, e[6].edges = [v[2], v[6]], [f[1], f[2]], [e[1], e[9], e[2], e[10]]
|
||||
e[7].vertices, e[7].faces, e[7].edges = [v[7], v[3]], [f[3], f[2]], [e[11], e[3], e[10], e[2]]
|
||||
e[8].vertices, e[8].faces, e[8].edges = [v[4], v[5]], [f[4], f[5]], [e[4], e[5], e[11], e[9]]
|
||||
e[9].vertices, e[9].faces, e[9].edges = [v[5], v[6]], [f[1], f[5]], [e[5], e[6], e[8], e[10]]
|
||||
e[10].vertices, e[10].faces, e[10].edges = [v[7], v[6]], [f[2], f[5]], [e[7], e[6], e[11], e[9]]
|
||||
e[11].vertices, e[11].faces, e[11].edges = [v[4], v[7]], [f[3], f[5]], [e[4], e[7], e[8], e[10]]
|
||||
|
||||
# print id(v[0].x)
|
||||
# print id(e[0].vertices[0].x)
|
||||
# print id(f[0].edges[0].vertices[0].x)
|
||||
# just to prove to myself that the objects are the same, this is what years of pass by value have done to me...
|
||||
|
||||
# v[0].x = 9
|
||||
# print id(v[0].x)
|
||||
# print id(e[0].vertices[0].x)
|
||||
# print id(f[0].edges[0].vertices[0].x)
|
||||
|
||||
# print id(v[0].x)
|
||||
# print id(e[0].vertices[0].x)
|
||||
# print id(f[0].edges[0].vertices[0].x)
|
||||
# v[0].x = 9
|
||||
|
||||
# print v[0].x
|
||||
# print e[0].vertices[0].x
|
||||
# print f[0].edges[0].vertices[0].x
|
||||
# print id(v[0].x)
|
||||
# print id(e[0].vertices[0].x)
|
||||
# print id(f[0].edges[0].vertices[0].x)
|
||||
|
||||
polygon = Polygon(v, e, f)
|
||||
polygon.catmullClarkRefine()
|
||||
# print v[0].x
|
||||
# print e[0].vertices[0].x
|
||||
# print f[0].edges[0].vertices[0].x
|
||||
p = Polygon()
|
||||
p.vertices = v
|
||||
p.edges = e
|
||||
p.faces = f
|
||||
return p
|
||||
|
||||
polygon = createPolygon()
|
||||
newPolygon = polygon.catmullClarkRefine()
|
||||
|
||||
# from numpy import *
|
||||
# import pylab
|
||||
# import mpl_toolkits.mplot3d.axes3d as p3
|
||||
from numpy import *
|
||||
import pylab
|
||||
import mpl_toolkits.mplot3d.axes3d as p3
|
||||
|
||||
# fig = pylab.figure()
|
||||
# ax = p3.Axes3D(fig)
|
||||
# ax.plot_wireframe(xs, ys, zs)
|
||||
# ax.set_xlabel('X')
|
||||
# ax.set_ylabel('Y')
|
||||
# ax.set_zlabel('Z')
|
||||
# pylab.show()
|
||||
|
||||
# v4 = Vertex(4, 0, 0, 1)
|
||||
# v5 = Vertex(5, 1, 0, 1)
|
||||
# v6 = Vertex(6, 0, 1, 1)
|
||||
# v7 = Vertex(7, 1, 1, 1)
|
||||
fig = pylab.figure()
|
||||
ax = p3.Axes3D(fig)
|
||||
for edge in newPolygon.edges:
|
||||
xs = [vertex.x for vertex in edge.vertices]
|
||||
ys = [vertex.y for vertex in edge.vertices]
|
||||
zs = [vertex.z for vertex in edge.vertices]
|
||||
ax.plot_wireframe(xs, ys, zs)
|
||||
ax.set_xlabel('X')
|
||||
ax.set_ylabel('Y')
|
||||
ax.set_zlabel('Z')
|
||||
pylab.show()
|
Loading…
Reference in New Issue
Block a user