Thanks to Alans insights i have come up with a working class for a square, overcomplicated probably but it lays the groundwork for my polygon class which will iterate over something to generate an n-sided polygon. If anyone is interested in actually running/testing this you need to get hold of pgylet 1.1, http://pyglet.org/ I would welcome any suggestions/improvements etc as my class knowledge is still somewhat lacking :-) I was thinking about using *args to get maybe the colour information in, not sure if i could do it with the points, is this a good idea/possible? And how can i go about testing that i get appropriate values during the testing/building phase (generally speaking), is it lots of print/return statements and then remove them? Thanks paul #!/usr/bin/env python
from pyglet.gl import * class Point: '''This init contains the x,y co-ordinates and the colour/transparency objects cr is red, cg is green, cb is blue and ct is transparency a value or 1.0, 1.0, 1.0, 1.0 is white/0% transparent''' def __init__(self, x=0, y=0, cr=1.0, cg=1.0, cb=1.0, ct=1.0): self.x = x self.y = y self.cr = cr self.cg = cg self.cb = cb self.ct = ct self.col = (cr, cg, cb, ct) class Square: '''First version, requires four points, an optional filled field and an optional line width field. The next version will iterate over a loop to allow the construction of polygons''' def __init__(self, p1, p2, p3, p4, filled=True, line_width=1): self.points = [p1,p2,p3,p4] self.filled = filled self.line_width = line_width def draw(self): draw_square(self.points[0].x, self.points[0].y, self.points[0].col, self.points[1].x,self.points[1].y, self.points[1].col, self.points[2].x, self.points[2].y, self.points[2].col, self.points[3].x, self.points[3].y, self.points[3].col, self.filled, self.line_width) def draw_square(x0, y0, col0, x1, y1, col1, x2, y2, col2, x3, y3, col3, filled=True, line_width=1): if filled: glBegin(GL_QUADS) else: glLineWidth(line_width) glBegin(GL_LINE_LOOP) glColor4f(col0[0], col0[1], col0[2], col0[3]) glVertex2i(int(x0), int(y0)) glColor4f(col1[0], col1[1], col1[2], col1[3]) glVertex2i(int(x1), int(y1)) glColor4f(col2[0], col2[1], col2[2], col2[3]) glVertex2i(int(x2), int(y2)) glColor4f(col3[0], col3[1], col3[2], col3[3]) glVertex2i(int(x3), int(y3)) glEnd() if not filled and line_width != 1: # reset to default glLineWidth(1) if __name__ == '__main__': from pyglet import window window = window.Window(250, 250) s1 = Square(Point(50,50,cg=0.0,cb=0.0), Point(200,50,cr=0.0,cb=0.0), Point(200,200,cr=0.0,cg=0.0), Point(50,200), filled=False, line_width=2) @window.event def on_draw(): window.clear() s1.draw() pyglet.app.run()
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor