#Peter Brinkmann, 8apr05 #multiple octahedra in PyTree # a PyCube for DSG Syzygy application from pytree import * import time class Octahedron: def __init__(self, parent, trafo=arMatrix4(), vertices=None, normals=None, colors=None): if not vertices: self.vertices=[(1, 0, 0), (0, 1, 0), (0, 0, 1), (-1, 0, 0), (0, -1, 0), (0, 0, -1)] else: self.vertices=vertices if not normals: self.normals=self.vertices[:] else: self.normals=normals if not colors: self.colors=[(0, 0, 1, 1), (0, 1, 0, 1), (1, 0, 0, 1), (1, 1, 0, 1), (1, 0, 1, 1), (0, 1, 1, 1)] else: self.colors=colors self.triangles=(1, 0, 2, 1, 2, 3, 1, 3, 5, 1, 5, 0, 4, 2, 0, 4, 0, 5, 4, 5, 3, 4, 3, 2) pp=[] nn=[] cc=[] for i in self.triangles: pp.extend(self.vertices[i]) nn.extend(self.normals[i]) cc.extend(self.colors[i]) self.transformation=Node(parent, dgTransform, trafo) self.pointNode=Node(self.transformation, dgPoints, 24, pp) self.normalNode=Node(self.pointNode, dgNormal3, 24, nn) self.colorNode=Node(self.normalNode, dgColor4, 24, cc) self.drawableNode=Node(self.colorNode, dgDrawable, DG_TRIANGLES, 8) def __del__(self): self.detach() def detach(self): self.transformation.detach() def attachTo(self, parent): self.transformation.attachTo(parent) sg=SceneGraph() octahedra=[[[ Octahedron(sg.worldNode, ar_translationMatrix(i, j, k)) for i in (-3, 0, 3)] for j in (-3, 0, 3)] for k in (-3, 0, 3)] lights=Node(sg.worldNode,dgTransform,arMatrix4()) Node(lights,dgLight,0,arVector4(1,0,0,0),arVector3(1,1,1)) Node(lights,dgLight,1,arVector4(0,1,0,0),arVector3(1,1,1)) Node(lights,dgLight,2,arVector4(0,0,1,0),arVector3(1,1,1)) sg.start() # launchConsole(globals()) m0=sg.getObjectMatrix() while 1: sg.updateViewer() if sg.getObjectMatrix()!=m0: m0=sg.getObjectMatrix() sg.worldNode(sg.worldNode.default[0]*m0**-1) time.sleep(0.02)