X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/95bfd958bda8955ac81277c78e5627c926154f39..d6dabac05db3bb9365862c65663df44b9e0be508:/wxPython/demo/GLCanvas.py diff --git a/wxPython/demo/GLCanvas.py b/wxPython/demo/GLCanvas.py index dd5d27eaec..6757931c2f 100644 --- a/wxPython/demo/GLCanvas.py +++ b/wxPython/demo/GLCanvas.py @@ -1,15 +1,8 @@ -# 11/18/2003 - Jeff Grimmett (grimmtooth@softhome.net) -# -# o Updated for wx namespace -# o Note: unable to install PyOpenGL on my system as I am running Python 2.3 -# and PyOpenGL does not support anything above Python 2.2. Did what I could, -# but odds are good there are problems. -# -import wx +import wx try: - import wx.glcanvas as glcanvas + from wx import glcanvas haveGLCanvas = True except ImportError: haveGLCanvas = False @@ -17,9 +10,8 @@ except ImportError: try: # The Python OpenGL package can be found at # http://PyOpenGL.sourceforge.net/ - - import OpenGL.GL as gl - import OpenGL.GLUT as glut + from OpenGL.GL import * + from OpenGL.GLUT import * haveOpenGL = True except ImportError: haveOpenGL = False @@ -28,25 +20,23 @@ except ImportError: if not haveGLCanvas: def runTest(frame, nb, log): - dlg = wx.MessageDialog( - frame, 'The wx.GLCanvas has not been included with this build of wxPython!', - 'Sorry', wx.OK | wx.ICON_INFORMATION - ) - + dlg = wx.MessageDialog(frame, 'The GLCanvas class has not been included with this build of wxPython!', + 'Sorry', wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() elif not haveOpenGL: def runTest(frame, nb, log): - dlg = wx.MessageDialog( - frame, 'The OpenGL package was not found. You can get it at\n' - 'http://PyOpenGL.sourceforge.net/', 'Sorry', wx.OK | wx.ICON_INFORMATION - ) - + dlg = wx.MessageDialog(frame, + 'The OpenGL package was not found. You can get it at\n' + 'http://PyOpenGL.sourceforge.net/', + 'Sorry', wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() + + else: buttonDefs = { wx.NewId() : ('CubeCanvas', 'Cube'), @@ -62,14 +52,13 @@ else: box.Add((20, 30)) keys = buttonDefs.keys() keys.sort() - for k in keys: text = buttonDefs[k][1] btn = wx.Button(self, k, text) box.Add(btn, 0, wx.ALIGN_CENTER|wx.ALL, 15) - self.Bind(wx.EVT_BUTTON, self.OnButton, id=k) + self.Bind(wx.EVT_BUTTON, self.OnButton, btn) - #** Enable this to show putting a wx.GLCanvas on the wxPanel + #** Enable this to show putting a GLCanvas on the wx.Panel if 0: c = CubeCanvas(self) c.SetSize((200, 200)) @@ -105,36 +94,40 @@ else: self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_PAINT, self.OnPaint) - self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseDown) # needs fixing... + self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseDown) self.Bind(wx.EVT_LEFT_UP, self.OnMouseUp) self.Bind(wx.EVT_MOTION, self.OnMouseMotion) + def OnEraseBackground(self, event): pass # Do nothing, to avoid flashing on MSW. + def OnSize(self, event): size = self.GetClientSize() - if self.GetContext(): self.SetCurrent() - glcanvas.glViewport(0, 0, size.width, size.height) + glViewport(0, 0, size.width, size.height) + event.Skip() + def OnPaint(self, event): dc = wx.PaintDC(self) self.SetCurrent() - if not self.init: self.InitGL() self.init = True - self.OnDraw() + def OnMouseDown(self, evt): self.CaptureMouse() + def OnMouseUp(self, evt): self.ReleaseMouse() + def OnMouseMotion(self, evt): if evt.Dragging() and evt.LeftIsDown(): self.x, self.y = self.lastx, self.lasty @@ -142,113 +135,118 @@ else: self.Refresh(False) + + class CubeCanvas(MyCanvasBase): def InitGL(self): # set viewing projection - glcanvas.glMatrixMode(glcanvas.GL_PROJECTION); - glcanvas.glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0); + glMatrixMode(GL_PROJECTION); + glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0); # position viewer - glcanvas.glMatrixMode(glcanvas.GL_MODELVIEW); - glcanvas.glTranslatef(0.0, 0.0, -2.0); + glMatrixMode(GL_MODELVIEW); + glTranslatef(0.0, 0.0, -2.0); # position object - glcanvas.glRotatef(self.y, 1.0, 0.0, 0.0); - glcanvas.glRotatef(self.x, 0.0, 1.0, 0.0); + glRotatef(self.y, 1.0, 0.0, 0.0); + glRotatef(self.x, 0.0, 1.0, 0.0); - glcanvas.glEnable(glcanvas.GL_DEPTH_TEST); - glcanvas.glEnable(glcanvas.GL_LIGHTING); - glcanvas.glEnable(glcanvas.GL_LIGHT0); + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); def OnDraw(self): # clear color and depth buffers - glcanvas.glClear(glcanvas.GL_COLOR_BUFFER_BIT | glcanvas.GL_DEPTH_BUFFER_BIT) + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); # draw six faces of a cube - glcanvas.glBegin(glcanvas.GL_QUADS) - glcanvas.glNormal3f( 0.0, 0.0, 1.0) - glcanvas.glVertex3f( 0.5, 0.5, 0.5) - glcanvas.glVertex3f(-0.5, 0.5, 0.5) - glcanvas.glVertex3f(-0.5,-0.5, 0.5) - glcanvas.glVertex3f( 0.5,-0.5, 0.5) - - glcanvas.glNormal3f( 0.0, 0.0,-1.0) - glcanvas.glVertex3f(-0.5,-0.5,-0.5) - glcanvas.glVertex3f(-0.5, 0.5,-0.5) - glcanvas.glVertex3f( 0.5, 0.5,-0.5) - glcanvas.glVertex3f( 0.5,-0.5,-0.5) - - glcanvas.glNormal3f( 0.0, 1.0, 0.0) - glcanvas.glVertex3f( 0.5, 0.5, 0.5) - glcanvas.glVertex3f( 0.5, 0.5,-0.5) - glcanvas.glVertex3f(-0.5, 0.5,-0.5) - glcanvas.glVertex3f(-0.5, 0.5, 0.5) - - glcanvas.glNormal3f( 0.0,-1.0, 0.0) - glcanvas.glVertex3f(-0.5,-0.5,-0.5) - glcanvas.glVertex3f( 0.5,-0.5,-0.5) - glcanvas.glVertex3f( 0.5,-0.5, 0.5) - glcanvas.glVertex3f(-0.5,-0.5, 0.5) - - glcanvas.glNormal3f( 1.0, 0.0, 0.0) - glcanvas.glVertex3f( 0.5, 0.5, 0.5) - glcanvas.glVertex3f( 0.5,-0.5, 0.5) - glcanvas.glVertex3f( 0.5,-0.5,-0.5) - glcanvas.glVertex3f( 0.5, 0.5,-0.5) - - glcanvas.glNormal3f(-1.0, 0.0, 0.0) - glcanvas.glVertex3f(-0.5,-0.5,-0.5) - glcanvas.glVertex3f(-0.5,-0.5, 0.5) - glcanvas.glVertex3f(-0.5, 0.5, 0.5) - glcanvas.glVertex3f(-0.5, 0.5,-0.5) - glcanvas.glEnd() - - glcanvas.glRotatef((self.lasty - self.y)/100., 1.0, 0.0, 0.0); - glcanvas.glRotatef((self.lastx - self.x)/100., 0.0, 1.0, 0.0); + glBegin(GL_QUADS) + glNormal3f( 0.0, 0.0, 1.0) + glVertex3f( 0.5, 0.5, 0.5) + glVertex3f(-0.5, 0.5, 0.5) + glVertex3f(-0.5,-0.5, 0.5) + glVertex3f( 0.5,-0.5, 0.5) + + glNormal3f( 0.0, 0.0,-1.0) + glVertex3f(-0.5,-0.5,-0.5) + glVertex3f(-0.5, 0.5,-0.5) + glVertex3f( 0.5, 0.5,-0.5) + glVertex3f( 0.5,-0.5,-0.5) + + glNormal3f( 0.0, 1.0, 0.0) + glVertex3f( 0.5, 0.5, 0.5) + glVertex3f( 0.5, 0.5,-0.5) + glVertex3f(-0.5, 0.5,-0.5) + glVertex3f(-0.5, 0.5, 0.5) + + glNormal3f( 0.0,-1.0, 0.0) + glVertex3f(-0.5,-0.5,-0.5) + glVertex3f( 0.5,-0.5,-0.5) + glVertex3f( 0.5,-0.5, 0.5) + glVertex3f(-0.5,-0.5, 0.5) + + glNormal3f( 1.0, 0.0, 0.0) + glVertex3f( 0.5, 0.5, 0.5) + glVertex3f( 0.5,-0.5, 0.5) + glVertex3f( 0.5,-0.5,-0.5) + glVertex3f( 0.5, 0.5,-0.5) + + glNormal3f(-1.0, 0.0, 0.0) + glVertex3f(-0.5,-0.5,-0.5) + glVertex3f(-0.5,-0.5, 0.5) + glVertex3f(-0.5, 0.5, 0.5) + glVertex3f(-0.5, 0.5,-0.5) + glEnd() + + glRotatef((self.lasty - self.y)/100., 1.0, 0.0, 0.0); + glRotatef((self.lastx - self.x)/100., 0.0, 1.0, 0.0); self.SwapBuffers() + + + class ConeCanvas(MyCanvasBase): def InitGL( self ): - glcanvas.glMatrixMode(glcanvas.GL_PROJECTION); + glMatrixMode(GL_PROJECTION); # camera frustrum setup - glcanvas.glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0); - glcanvas.glMaterial(glcanvas.GL_FRONT, glcanvas.GL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) - glcanvas.glMaterial(glcanvas.GL_FRONT, glcanvas.GL_DIFFUSE, [0.8, 0.8, 0.8, 1.0]) - glcanvas.glMaterial(glcanvas.GL_FRONT, glcanvas.GL_SPECULAR, [1.0, 0.0, 1.0, 1.0]) - glcanvas.glMaterial(glcanvas.GL_FRONT, glcanvas.GL_SHININESS, 50.0) - glcanvas.glLight(glcanvas.GL_LIGHT0, glcanvas.GL_AMBIENT, [0.0, 1.0, 0.0, 1.0]) - glcanvas.glLight(glcanvas.GL_LIGHT0, glcanvas.GL_DIFFUSE, [1.0, 1.0, 1.0, 1.0]) - glcanvas.glLight(glcanvas.GL_LIGHT0, glcanvas.GL_SPECULAR, [1.0, 1.0, 1.0, 1.0]) - glcanvas.glLight(glcanvas.GL_LIGHT0, glcanvas.GL_POSITION, [1.0, 1.0, 1.0, 0.0]); - glcanvas.glLightModel(glcanvas.GL_LIGHT_MODEL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) - glcanvas.glEnable(glcanvas.GL_LIGHTING) - glcanvas.glEnable(glcanvas.GL_LIGHT0) - glcanvas.glDepthFunc(glcanvas.GL_LESS) - glcanvas.glEnable(glcanvas.GL_DEPTH_TEST) - glcanvas.glClear(glcanvas.GL_COLOR_BUFFER_BIT | glcanvas.GL_DEPTH_BUFFER_BIT) + 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) # position viewer - glcanvas.glMatrixMode(glcanvas.GL_MODELVIEW); + glMatrixMode(GL_MODELVIEW); def OnDraw(self): # clear color and depth buffers - glcanvas.glClear(glcanvas.GL_COLOR_BUFFER_BIT | glcanvas.GL_DEPTH_BUFFER_BIT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); # use a fresh transformation matrix - glcanvas.glPushMatrix() + glPushMatrix() # position object - glcanvas.glTranslate(0.0, 0.0, -2.0); - glcanvas.glRotate(30.0, 1.0, 0.0, 0.0); - glcanvas.glRotate(30.0, 0.0, 1.0, 0.0); - - glcanvas.glTranslate(0, -1, 0) - glcanvas.glRotate(250, 1, 0, 0) - glcanvas.glutSolidCone(0.5, 1, 30, 5) - glcanvas.glPopMatrix() - glcanvas.glRotatef((self.lasty - self.y)/100., 0.0, 0.0, 1.0); - glcanvas.glRotatef(0.0, (self.lastx - self.x)/100., 1.0, 0.0); + 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); + + glTranslate(0, -1, 0) + glRotate(250, 1, 0, 0) + glutSolidCone(0.5, 1, 30, 5) + glPopMatrix() + glRotatef((self.lasty - self.y)/100., 0.0, 0.0, 1.0); + glRotatef(0.0, (self.lastx - self.x)/100., 1.0, 0.0); # push into visible buffer self.SwapBuffers() @@ -259,25 +257,19 @@ else: + overview = """\ """ -#---------------------------------------------------------------------- -def _test(): - class MyApp(wxApp): - def OnInit(self): - frame = wx.Frame(None, -1, "GL Demos", wx.DefaultPosition, (600,300)) - #win = ConeCanvas(frame) - MySplitter(frame) - frame.Show(True) - self.SetTopWindow(frame) - return True +if __name__ == '__main__': + import sys,os + import run + run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) - app = MyApp(0) - app.MainLoop() -if __name__ == '__main__': - _test() + + +#----------------------------------------------------------------------