diff lightsim/openglsim.py @ 463:60b49f6c2027

start porting lightsim to qt
author drewp@bigasterisk.com
date Mon, 01 Sep 2008 00:41:29 +0000
parents 941cfe1e1691
children f69ba5ac17c5
line wrap: on
line diff
--- a/lightsim/openglsim.py	Wed Jun 18 07:19:53 2008 +0000
+++ b/lightsim/openglsim.py	Mon Sep 01 00:41:29 2008 +0000
@@ -7,14 +7,9 @@
 import Tkinter as tk
 import Image
 from louie import dispatcher
-try:
-    from OpenGL import Tk as Togl
-    from OpenGL.GL import *
-except ImportError:
-    sys.path.append("/usr/lib/python2.4/site-packages/OpenGL/Tk/linux2-tk8.4")
-    from OpenGL.GL import *
-    import Togl
-  
+
+from PyQt4 import QtCore, QtOpenGL
+from OpenGL.GL import *
 
 def xxxdrawWithAlpha(imgString, w, h, alpha):
     # this one should be faster because GL does the alpha adjust, but
@@ -26,22 +21,21 @@
     #glBlendColor(1, 1, 1, mag) # needs ARB_imaging
     glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, imgString)
 
-class Surface(Togl.Opengl):
+class Surface(QtOpenGL.QGLWidget):
     """widget that adds multiple image files together with adjustable scales"""
-    def __init__(self, master, filenames, width=512, height=270,
+    def __init__(self, parent, filenames, width=512, height=270,
                  imgRescaleTo=None):
         """
         imgRescaleTo can be a length of pixels to reduce all the input
         images into. Try 64 for a low res drawing.
         """
-        Togl.Opengl.__init__(self, master=master, width=width,
-                             height=height, double=True, depth=0)
-        self.width, self.height = width, height
+        QtOpenGL.QGLWidget.__init__(self, parent)
 
         self.levels = {} # filename : brightness
   
         self.image = {} # filename : imgstr
         for filename in filenames:
+            print "open", filename
             im = Image.open(filename)
             if imgRescaleTo:
                 im.thumbnail((imgRescaleTo, imgRescaleTo))
@@ -50,20 +44,22 @@
             self.imageHeight = im.size[1]
             self.image[filename] = im.convert("RGBA").tostring()
   
-        self.set_centerpoint(0, 0, 0)
-  
+        #self.set_centerpoint(0, 0, 0)
+
+    def initializeGL(self): 
         glDisable(GL_CULL_FACE)
         glShadeModel(GL_FLAT)
         print 'GL_ARB_imaging', 'GL_ARB_imaging' in glGetString(GL_EXTENSIONS)
         import OpenGL
         print OpenGL.__version__
-
-        self.bind("<Configure>", self.configure)
+       
+#    def minimumSizeHint(self):
+#        return QtCore.QSize(512, 512)
 
-    def configure(self, ev):
-        self.width, self.height = ev.width, ev.height
-  
-    def redraw(self, event=None):
+#    def sizeHint(self):
+#        return QtCore.QSize(512, 512)
+
+    def paintGL(self):
         """you set self.levels to dict and call tkRedraw"""
         assert 'GL_ARB_imaging' in glGetString(GL_EXTENSIONS).split()
         start = time.time()
@@ -80,7 +76,6 @@
         # drawing to glAccum might be good
         layerTimes = []
         for filename, mag in self.levels.items():
-            #print "pic %s at %f" % (filename, mag)
             t = time.time()
             self.drawWithAlpha(self.image[filename],
                                self.imageWidth, self.imageHeight, mag)
@@ -109,8 +104,8 @@
         # this right now.
         #glBlendFunc(GL_CONSTANT_COLOR, GL_ONE)
         #glBlendColor(.8, .5, .5, .5)
-        
-        glPixelZoom(self.width / w, self.height / h)
+
+        glPixelZoom(self.width() / w, self.height() / h)
         glDrawPixels(w, h,
                      GL_RGBA, GL_UNSIGNED_BYTE, ar.tostring())
         #print "  draw", time.time() - t
@@ -118,8 +113,23 @@
     def newLevels(self, event=None, levels=None):
         if levels != self.levels:
             self.levels = levels
-            self.tkRedraw()
-  
+            self.updateGL()
+
+
+##     def mousePressEvent(self, event):
+##         self.lastPos = QtCore.QPoint(event.pos())
+
+##     def mouseMoveEvent(self, event):
+##         dx = event.x() - self.lastPos.x()
+##         dy = event.y() - self.lastPos.y()
+##         rot = (.25*dy, .25*dx, 0)
+##         if event.buttons() & QtCore.Qt.LeftButton:
+##             self.emit(QtCore.SIGNAL("rotationChanged"), rot)
+##         elif event.buttons() & QtCore.Qt.MidButton:
+##             self.emit(QtCore.SIGNAL("camDistChanged"), .01*dy)            
+
+##         self.lastPos = QtCore.QPoint(event.pos())
+
 def main():
     root = tk.Frame()
     root.pack(expand=True, fill='both')