]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/wxPython/demo/wxGLCanvas.py
1. Grid cell defaults are now handled by an internal
[wxWidgets.git] / utils / wxPython / demo / wxGLCanvas.py
index 4290f92767328b9147df1da087ed823aedbeade7..2da77bfa2a7efd7138be04fad2833c5421e4000a 100644 (file)
@@ -6,6 +6,15 @@ try:
 except ImportError:
     haveGLCanvas = false
 
+try:
+    # The Python OpenGL package can be found at
+    # http://starship.python.net:9673/crew/da/Code/PyOpenGL/
+    from OpenGL.GL import *
+    from OpenGL.GLUT import *
+    haveOpenGL = true
+except ImportError:
+    haveOpenGL = false
+
 #----------------------------------------------------------------------
 
 if not haveGLCanvas:
@@ -15,16 +24,38 @@ if not haveGLCanvas:
         dlg.ShowModal()
         dlg.Destroy()
 
-else:
+elif not haveOpenGL:
+    def runTest(frame, nb, log):
+        dlg = wxMessageDialog(frame,
+                              'The OpenGL package was not found.  You can get it at\n'
+                              'http://starship.python.net:9673/crew/da/Code/PyOpenGL/',
+                          'Sorry', wxOK | wxICON_INFORMATION)
+        dlg.ShowModal()
+        dlg.Destroy()
 
 
+else:
     def runTest(frame, nb, log):
-        win = TestGLCanvas(nb)
-        return win
+        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 TestGLCanvas(wxGLCanvas):
+    class CubeCanvas(wxGLCanvas):
         def __init__(self, parent):
             wxGLCanvas.__init__(self, parent, -1)
             EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)
@@ -33,10 +64,9 @@ else:
         def OnEraseBackground(self, event):
             pass # Do nothing, to avoid flashing.
 
-
         def OnSize(self, event):
             size = self.GetClientSize()
-            if self.GetContext() != 'NULL':
+            if self.GetContext():
                 self.SetCurrent()
                 glViewport(0, 0, size.width, size.height)
 
@@ -44,12 +74,8 @@ else:
         def OnPaint(self, event):
             dc = wxPaintDC(self)
 
-            ctx = self.GetContext()
-            if ctx == "NULL": return
-
             self.SetCurrent()
 
-
             if not self.init:
                 self.InitGL()
                 self.init = true
@@ -118,8 +144,70 @@ else:
 
 
 
+    class ConeCanvas(wxGLCanvas):
+        def __init__(self, parent):
+            wxGLCanvas.__init__(self, parent, -1)
+            EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)
+            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()
+
+
+#----------------------------------------------------------------------
 
 
 
@@ -140,8 +228,9 @@ overview = """\
 def _test():
     class MyApp(wxApp):
         def OnInit(self):
-            frame = wxFrame(NULL, -1, "HELP ME!!")
-            win = TestGLCanvas(frame)
+            frame = wxFrame(NULL, -1, "GL Demos", wxDefaultPosition, wxSize(600,300))
+            #win = ConeCanvas(frame)
+            MySplitter(frame)
             frame.Show(TRUE)
             self.SetTopWindow(frame)
             return TRUE