from wxPython.wx import * from wxPython.glcanvas import * haveGLCanvas = true from OpenGL.GL import * from OpenGL.GLUT import * haveOpenGL = true #---------------------------------------------------------------------- def runTest(frame, nb, log): win = wxFrame(frame, -1, "GL Demos", wxDefaultPosition, wxSize(300,300)) CubeCanvas(win) #MySplitter(win) frame.otherWin = win win.Show(true) return None class MySplitter(wxSplitterWindow): def __init__(self, parent): wxSplitterWindow.__init__(self, parent, -1) cube = CubeCanvas(self) cone = ConeCanvas(self) self.SplitVertically(cube, cone) self.SetSashPosition(300) class CubeCanvas(wxGLCanvas): def __init__(self, parent): wxGLCanvas.__init__(self, parent, -1) #, #attribList=[GL_RED_BITS, 4, GL_DOUBLEBUFFER] ) EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) EVT_SIZE(self, self.OnSize) EVT_PAINT(self, self.OnPaint) self.init = false def OnEraseBackground(self, event): pass # Do nothing, to avoid flashing. def OnSize(self, event): size = self.GetClientSize() if self.GetContext(): self.SetCurrent() glViewport(0, 0, size.width, size.height) def OnPaint(self, event): dc = wxPaintDC(self) self.SetCurrent() if not self.init: self.InitGL() self.init = true # clear color and depth buffers glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); # draw six faces of a cube glBegin(GL_QUADS) self.y_adj = 5.5 pole_data =(([8.8333,self.y_adj + 4.8333,3.70833],[10,self.y_adj + 4.8333,3.70833],[10,self.y_adj + 6,3.70833],[8.8333,self.y_adj + 6,3.70833]), ([8.8333,self.y_adj + 4.8333,4],[10,self.y_adj + 4.8333,4],[10,self.y_adj + 6,4],[8.8333,self.y_adj + 6,4]), ([8.916,self.y_adj + 4.916,3.70833],[9.916,self.y_adj + 4.916,3.70833],[10.333,self.y_adj + 4.5,.5],[8.5,self.y_adj + 4.5,.5]), ([8.916,self.y_adj + 5.916,3.70833],[9.916,self.y_adj + 5.916,3.70833],[10.333,self.y_adj + 6.333,.5],[8.5,self.y_adj + 6.333,.5]), ([8.916,self.y_adj + 4.916,3.70833],[8.916,self.y_adj + 5.916,3.70833],[8.5,self.y_adj + 6.333,.5],[8.5,self.y_adj + 4.5,.5]), ([9.25,self.y_adj + 5.25,4],[9.25,self.y_adj + 5.25,7.9583],[9.25,self.y_adj + 5.5833,7.9583],[9.25,self.y_adj + 5.5833,4]), ([9.583,self.y_adj + 5.25,4],[9.583,self.y_adj + 5.25,7.9583],[9.583,self.y_adj + 5.5833,7.9583],[9.583,self.y_adj + 5.5833,4])) self.graph_list(pole_data) glEnd() self.SwapBuffers() def InitGL(self): # set viewing projection glMatrixMode(GL_PROJECTION); glFrustum(70, 40, -0.5, 70, 40, 20); # position viewer glMatrixMode(GL_MODELVIEW); glTranslatef(0.0, 0.0, 180); # position object glRotatef(30.0, 1.0, 0.0, 0.0); glRotatef(30.0, 0.0, 1.0, 0.0); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); def graph_list(self,list): space_point = () for i in list: space_point = i[0] glNormal3f(space_point[0],space_point[1],space_point[2]) space_point = i[1] glVertex3f(space_point[0],space_point[1],space_point[2]) space_point = i[2] glVertex3f(space_point[0],space_point[1],space_point[2]) space_point = i[3] glVertex3f(space_point[0],space_point[1],space_point[2]) space_point = i[0] glVertex3f(space_point[0],space_point[1],space_point[2]) class ConeCanvas(wxGLCanvas): def __init__(self, parent): wxGLCanvas.__init__(self, parent, -1) EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) EVT_SIZE(self, self.OnSize) EVT_PAINT(self, self.OnPaint) self.init = false def OnEraseBackground(self, event): pass # Do nothing, to avoid flashing. def OnSize(self, event): size = self.GetClientSize() if self.GetContext(): self.SetCurrent() glViewport(0, 0, size.width, size.height) def GLInit( self ): glMatrixMode(GL_PROJECTION); # camera frustrum setup glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0); glMaterial(GL_FRONT, GL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) glMaterial(GL_FRONT, GL_DIFFUSE, [0.8, 0.8, 0.8, 1.0]) glMaterial(GL_FRONT, GL_SPECULAR, [1.0, 0.0, 1.0, 1.0]) glMaterial(GL_FRONT, GL_SHININESS, 50.0) glLight(GL_LIGHT0, GL_AMBIENT, [0.0, 1.0, 0.0, 1.0]) glLight(GL_LIGHT0, GL_DIFFUSE, [1.0, 1.0, 1.0, 1.0]) glLight(GL_LIGHT0, GL_SPECULAR, [1.0, 1.0, 1.0, 1.0]) glLight(GL_LIGHT0, GL_POSITION, [1.0, 1.0, 1.0, 0.0]); glLightModel(GL_LIGHT_MODEL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) glDepthFunc(GL_LESS) glEnable(GL_DEPTH_TEST) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) def OnPaint( self, event ): dc = wxPaintDC(self) if not self.init: self.GLInit() self.init = true ### Tell system to use _this_ glcanvas for all commands self.SetCurrent() # clear color and depth buffers glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); # position viewer glMatrixMode(GL_MODELVIEW); # use a fresh transformation matrix glPushMatrix() # position object glTranslate(0.0, 0.0, -2.0); glRotate(30.0, 1.0, 0.0, 0.0); glRotate(30.0, 0.0, 1.0, 0.0); ### From cone.py glTranslate(0, -1, 0) glRotate(250, 1, 0, 0) glutSolidCone(1, 2, 50, 10) glPopMatrix() # push into visible buffer self.SwapBuffers() #---------------------------------------------------------------------- overview = """\ """ #---------------------------------------------------------------------- def _test(): class MyApp(wxApp): def OnInit(self): frame = wxFrame(NULL, -1, "GL Demos", wxDefaultPosition, wxSize(600,300)) #win = ConeCanvas(frame) #win = CubeCanvas(frame) MySplitter(frame) frame.Show(TRUE) self.SetTopWindow(frame) return TRUE app = MyApp(0) app.MainLoop() if __name__ == '__main__': _test()