X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d58a80fae0ea22e2012b17953b6d9deb37f4660b..61940a7061d0b5d5122b1e1e939cfa2d72596999:/wxPython/demo/wxGLCanvas.py diff --git a/wxPython/demo/wxGLCanvas.py b/wxPython/demo/wxGLCanvas.py index 015504053b..51c231e22a 100644 --- a/wxPython/demo/wxGLCanvas.py +++ b/wxPython/demo/wxGLCanvas.py @@ -1,70 +1,90 @@ -from wxPython.wx import * +# 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 + try: - from wxPython.glcanvas import * - haveGLCanvas = true + import wx.glcanvas as glcanvas + haveGLCanvas = True except ImportError: - haveGLCanvas = false + haveGLCanvas = False try: # The Python OpenGL package can be found at # http://PyOpenGL.sourceforge.net/ - from OpenGL.GL import * - from OpenGL.GLUT import * - haveOpenGL = true + + import OpenGL.GL as gl + import OpenGL.GLUT as glut + haveOpenGL = True except ImportError: - haveOpenGL = false + haveOpenGL = False #---------------------------------------------------------------------- if not haveGLCanvas: def runTest(frame, nb, log): - dlg = wxMessageDialog(frame, 'The wxGLCanvas has not been included with this build of wxPython!', - 'Sorry', wxOK | wxICON_INFORMATION) + dlg = wx.MessageDialog( + frame, 'The wxGLCanvas 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 = wxMessageDialog(frame, - 'The OpenGL package was not found. You can get it at\n' - 'http://PyOpenGL.sourceforge.net/', - 'Sorry', wxOK | wxICON_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 = { - wxNewId() : ('CubeCanvas', 'Cube'), - wxNewId() : ('ConeCanvas', 'Cone'), + wx.NewId() : ('CubeCanvas', 'Cube'), + wx.NewId() : ('ConeCanvas', 'Cone'), } - class ButtonPanel(wxPanel): + class ButtonPanel(wx.Panel): def __init__(self, parent, log): - wxPanel.__init__(self, parent, -1) + wx.Panel.__init__(self, parent, -1) self.log = log - box = wxBoxSizer(wxVERTICAL) - box.Add(20, 30) + box = wx.BoxSizer(wx.VERTICAL) + box.Add((20, 30)) keys = buttonDefs.keys() keys.sort() + for k in keys: text = buttonDefs[k][1] - btn = wxButton(self, k, text) - box.Add(btn, 0, wxALIGN_CENTER|wxALL, 15) - EVT_BUTTON(self, k, self.OnButton) + 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) + + #** Enable this to show putting a wxGLCanvas on the wxPanel + if 0: + c = CubeCanvas(self) + c.SetSize((200, 200)) + box.Add(c, 0, wx.ALIGN_CENTER|wx.ALL, 15) - self.SetAutoLayout(true) + self.SetAutoLayout(True) self.SetSizer(box) + def OnButton(self, evt): canvasClassName = buttonDefs[evt.GetId()][0] canvasClass = eval(canvasClassName) - frame = wxFrame(None, -1, canvasClassName, size=(400,400)) + frame = wx.Frame(None, -1, canvasClassName, size=(400,400)) canvas = canvasClass(frame) - frame.Show(true) + frame.Show(True) @@ -75,35 +95,38 @@ else: - class MyCanvasBase(wxGLCanvas): + class MyCanvasBase(glcanvas.GLCanvas): def __init__(self, parent): - wxGLCanvas.__init__(self, parent, -1) - self.init = false + glcanvas.GLCanvas.__init__(self, parent, -1) + self.init = False # initial mouse position self.lastx = self.x = 30 self.lasty = self.y = 30 - EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) - EVT_SIZE(self, self.OnSize) - EVT_PAINT(self, self.OnPaint) - EVT_LEFT_DOWN(self, self.OnMouseDown) # needs fixing... - EVT_LEFT_UP(self, self.OnMouseUp) - EVT_MOTION(self, self.OnMouseMotion) + 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_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() - glViewport(0, 0, size.width, size.height) + glcanvas.glViewport(0, 0, size.width, size.height) def OnPaint(self, event): - dc = wxPaintDC(self) + dc = wx.PaintDC(self) self.SetCurrent() + if not self.init: self.InitGL() - self.init = true + self.init = True + self.OnDraw() def OnMouseDown(self, evt): @@ -116,121 +139,116 @@ else: if evt.Dragging() and evt.LeftIsDown(): self.x, self.y = self.lastx, self.lasty self.x, self.y = evt.GetPosition() - self.Refresh(false) - - + self.Refresh(False) class CubeCanvas(MyCanvasBase): def InitGL(self): # set viewing projection - glMatrixMode(GL_PROJECTION); - glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0); + glcanvas.glMatrixMode(glcanvas.GL_PROJECTION); + glcanvas.glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0); # position viewer - glMatrixMode(GL_MODELVIEW); - glTranslatef(0.0, 0.0, -2.0); + glcanvas.glMatrixMode(glcanvas.GL_MODELVIEW); + glcanvas.glTranslatef(0.0, 0.0, -2.0); # position object - glRotatef(self.y, 1.0, 0.0, 0.0); - glRotatef(self.x, 0.0, 1.0, 0.0); + glcanvas.glRotatef(self.y, 1.0, 0.0, 0.0); + glcanvas.glRotatef(self.x, 0.0, 1.0, 0.0); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); + glcanvas.glEnable(glcanvas.GL_DEPTH_TEST); + glcanvas.glEnable(glcanvas.GL_LIGHTING); + glcanvas.glEnable(glcanvas.GL_LIGHT0); def OnDraw(self): # clear color and depth buffers - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glcanvas.glClear(glcanvas.GL_COLOR_BUFFER_BIT | glcanvas.GL_DEPTH_BUFFER_BIT) # draw six faces of a cube - 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); + 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); self.SwapBuffers() - - - class ConeCanvas(MyCanvasBase): def InitGL( self ): - glMatrixMode(GL_PROJECTION); + glcanvas.glMatrixMode(glcanvas.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) + 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) # position viewer - glMatrixMode(GL_MODELVIEW); + glcanvas.glMatrixMode(glcanvas.GL_MODELVIEW); def OnDraw(self): # clear color and depth buffers - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glcanvas.glClear(glcanvas.GL_COLOR_BUFFER_BIT | glcanvas.GL_DEPTH_BUFFER_BIT); # use a fresh transformation matrix - glPushMatrix() + glcanvas.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); - - 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); + 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); # push into visible buffer self.SwapBuffers() @@ -241,29 +259,21 @@ else: - - - - - overview = """\ """ - - - #---------------------------------------------------------------------- def _test(): class MyApp(wxApp): def OnInit(self): - frame = wxFrame(None, -1, "GL Demos", wxDefaultPosition, wxSize(600,300)) + frame = wx.Frame(None, -1, "GL Demos", wx.DefaultPosition, (600,300)) #win = ConeCanvas(frame) MySplitter(frame) - frame.Show(TRUE) + frame.Show(True) self.SetTopWindow(frame) - return TRUE + return True app = MyApp(0) app.MainLoop()