|
From: Dethe E. <de...@al...> - 2000-10-24 15:51:46
|
Hi Stephen,
I see that in the archived message too. Since the extra "3D"s and "=" were
not in the original code (it ran fine before I sent it) I assume that they
were introduced as an artifact of my mailer or sending it as an attachment
(gotta switch from Outlook).
Below is the current version, no attachment this time. I've improved the
color cycling to improve performance a bit.
--Dethe
------------------------
from visual import *
class ico:
def __init__(self):
f = frame()
root5 = 5.0 ** 0.5
phi = (1.0 + root5)/2.0
tau = 1.0/phi
points =
[(1.0,phi,0.0),(-1.0,phi,0.0),(-1.0,-phi,0.0),(1.0,-phi,0.0),
(0.0,1.0,phi),(0.0,-1.0,phi),(0.0,-1.0,-phi),(0.0,1.0,-phi),
(phi,0.0,1.0),(phi,0.0,-1.0),(-phi,0.0,-1.0),(-phi,0.0,1.0)]
self.buildColorTable()
self.vertexColorIndex = 400 # blue
self.edgeColorIndex = 0 # red
self.faceColorIndex = 200 # green
self.vertexColor = self.colorTable[self.vertexColorIndex]
self.edgeColor = self.colorTable[self.edgeColorIndex]
self.faceColor = self.colorTable[self.faceColorIndex]
self.vertices = []
for point in points:
self.vertices.append(sphere(frame=f, pos=point, radius=0.4,
color=self.vertexColor))
ico_edge_indices = [
(0,1),(0,7),(0,9),(0,8),(0,4),
(1,7),(7,9),(9,8),(8,4),(4,1),
(7,10),(10,1),(1,11),(11,4),(4,5),
(5,8),(8,3),(3,9),(9,6),(6,7),
(10,11),(11,5),(5,3),(3,6),(6,10),
(2,10),(2,11),(2,5),(2,3),(2,6)]
self.edges = []
for edge in ico_edge_indices:
v1 = vector(points[edge[0]])
v2 = vector(points[edge[1]])
v3 = v2 - v1
self.edges.append(cylinder(frame=f, pos=v1, axis=v3, radius=0.1,
color=self.edgeColor))
face_list =
[0,9,7,6,10,2,11,5,4,8,0,9,0,1,7,10,0,4,1,11,10,6,2,3,5,8,11,2,10,6]
solid = []
for index in face_list:
solid.append(points[index])
self.faces = convex(frame=f, pos = solid, color=self.faceColor)
self.frame = f
def rotate(self, angle=None):
self.frame.rotate(angle=angle, axis=(0.0,0.0,-1.0))
def buildColorTable(self):
self.colorTable = []
red = 1.0
green = 0.0
blue = 0.0
for i in range(100):
self.colorTable.append((red,green,blue))
green = green + 0.01
for i in range(100):
self.colorTable.append((red,green,blue))
red = red - 0.01
for i in range (100):
self.colorTable.append((red,green,blue))
blue = blue + 0.01
for i in range(100):
self.colorTable.append((red,green,blue))
green = green - 0.01
for i in range (100):
self.colorTable.append((red,green,blue))
red = red + 0.01
for i in range(99):
self.colorTable.append((red,green,blue))
blue = blue - 0.01
self.maxcolorindex = len(self.colorTable)
def cycleColors(self):
self.cycleVertexColors()
self.cycleEdgeColors()
self.cycleFaceColors()
def cycleIndex(self, index):
index = index + 1
if index >= self.maxcolorindex:
index = 0
return index
def cycleVertexColors(self):
self.vertexColorIndex = self.cycleIndex(self.vertexColorIndex)
self.vertexColor = self.colorTable[self.vertexColorIndex]
for vertex in self.vertices:
vertex.color = self.vertexColor
def cycleEdgeColors(self):
self.edgeColorIndex = self.cycleIndex(self.edgeColorIndex)
self.edgeColor = self.colorTable[self.edgeColorIndex]
for edge in self.edges:
edge.color = self.edgeColor
def cycleFaceColors(self):
self.faceColorIndex = self.cycleIndex(self.faceColorIndex)
self.faceColor = self.colorTable[self.faceColorIndex]
self.faces.color = self.faceColor
def main():
i = ico()
while 1:
rate(30)
i.rotate(0.05)
i.cycleColors()
if __name__ == '__main__':
main()
|