Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r1106 - trunk/SwigInterface


Chronological Thread 
  • From: bigler@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r1106 - trunk/SwigInterface
  • Date: Thu, 8 Jun 2006 14:55:25 -0600 (MDT)

Author: bigler
Date: Thu Jun  8 14:55:25 2006
New Revision: 1106

Modified:
   trunk/SwigInterface/wxManta.py
Log:

Added a menubar with Quit and About and a status bar to show the
framerate.


Modified: trunk/SwigInterface/wxManta.py
==============================================================================
--- trunk/SwigInterface/wxManta.py      (original)
+++ trunk/SwigInterface/wxManta.py      Thu Jun  8 14:55:25 2006
@@ -82,8 +82,12 @@
     
 
 class mantaGLCanvas(wxGLCanvas):
-    def __init__(self, parent, sync_display, opengl_display):
-        wxGLCanvas.__init__(self, parent, -1, style=wx.NO_BORDER)
+    # updateFramerate is a function that you call to update the framerate
+    def __init__(self, parent, sync_display, opengl_display, 
updateFramerate):
+        wxGLCanvas.__init__(self, parent, -1, style=wx.NO_BORDER,
+                            size=wx.Size(xres, yres) )
+        self.printSize("panel", parent.GetSize())
+
         self.sync_display = sync_display
         self.opengl_display = opengl_display
         # We bind the paint event to allow for some initialization
@@ -91,6 +95,11 @@
         # we don't care about expose or "paint me" events.
         self.Bind(wx.EVT_PAINT, self.OnPaint)
         self.init = 0
+        self.prev_time = time.time()
+        self.updateFramerate = updateFramerate
+
+    def printSize(self, name, size):
+        print "%s size = (%d, %d)" % (name, size.x, size.y)
 
     def OnPaint(self, event):
         # Note that you must always generate a wxPaintDC object,
@@ -108,6 +117,9 @@
         size = self.GetSize()
         self.SetCurrent()
         glViewport(0, 0, size.x, size.y)
+#         self.printSize("viewport", size)
+#         self.printSize("viewport BestFittingSize", 
self.GetBestFittingSize())
+#         self.printSize("viewport BestSize", self.GetBestSize())
         glClearColor(0.05, 0.1, 0.2, 0.0);
         glClear(GL_COLOR_BUFFER_BIT);
         self.SwapBuffers()
@@ -122,6 +134,10 @@
         self.opengl_display.displayImage(self.sync_display.getCurrentImage())
         self.sync_display.doneRendering()
         self.SwapBuffers()
+        current_time = time.time()
+        framerate = 1.0/(current_time - self.prev_time)
+        self.updateFramerate(framerate)
+        self.prev_time = current_time
 
 
 class Frame(wx.Frame):
@@ -134,11 +150,30 @@
     ## OnInit
     
###########################################################################
     def OnInit(self) :
-        self.frame = Frame(parent=None, title='Manta',
-                           size=wx.Size(xres, yres) )
+        self.frame = Frame(parent=None, title='Manta')
+#                           size=wx.Size(xres, yres) )
         self.frame.Show()
+
+        self.frame.statusbar = self.frame.CreateStatusBar()
+
+        menuBar = wx.MenuBar()
+        menu1 = wx.Menu()
+        self.frame.Bind(wx.EVT_MENU, self.OnQuit,
+                  menu1.Append(wx.NewId(), "&Quit"))
+        menuBar.Append(menu1, "&File")
+        menu2 = wx.Menu()
+        self.frame.Bind(wx.EVT_MENU, self.OnAbout,
+                  menu2.Append(wx.NewId(), "About Manta"))
+        menuBar.Append(menu2, "&Help")
+        self.frame.SetMenuBar(menuBar)
         
 
+        self.panel = wx.Panel(self.frame)
+        self.panel.SetSize(wx.Size(xres, yres))
+        box = wx.BoxSizer(wx.HORIZONTAL)
+        box.Add(self.panel, 1, wx.EXPAND)
+        self.frame.SetSizerAndFit(box)
+
         
#######################################################################
         # Setup manta.
 
@@ -158,30 +193,30 @@
         # Image display.
         use_stereo = False
 
-#         renderFrameType = "glx"
-#         renderFrameType = "glx_sync"
+#        renderFrameType = "glx"
+#        renderFrameType = "glx_sync"
         renderFrameType = "ogl"
         display = None
         if (renderFrameType == "glx"):
             # This uses GLX directly
-            display = manta_new( OpenGLDisplay( None, 
self.frame.GetHandle()))
-            self.canvas = self.frame
+            display = manta_new( OpenGLDisplay( None, 
self.panel.GetHandle()))
+            self.canvas = self.panel
         elif (renderFrameType == "glx_sync"):
             # This uses the GLX with SyncDisplay
-            glx_display = 
manta_new(OpenGLDisplay(None,self.frame.GetHandle()))
+            glx_display = 
manta_new(OpenGLDisplay(None,self.panel.GetHandle()))
             self.sync_display = manta_new(SyncDisplay(vectorStr()))
             display = self.sync_display
             self.sync_display.setChild(glx_display)
             self.sync_thread = DisplayThread(self, self.sync_display)
-            self.canvas = self.frame
+            self.canvas = self.panel
         elif (renderFrameType == "ogl"):
             # This uses PureOpenGLDisplay
             self.sync_display = manta_new(SyncDisplay(vectorStr()))
             display = self.sync_display
             self.sync_display.setChild(manta_new( NullDisplay(vectorStr()) ))
             opengl_display = manta_new(PureOpenGLDisplay(""))
-            self.canvas = mantaGLCanvas(self.frame, self.sync_display,
-                                        opengl_display)
+            self.canvas = mantaGLCanvas(self.panel, self.sync_display,
+                                        opengl_display, self.updateFramerate)
             self.sync_thread = DisplayThread(self.canvas, self.sync_display)
 
         # Create a display channel.
@@ -201,6 +236,8 @@
         self.canvas.Bind( wx.EVT_KEY_DOWN, self.OnChar )
         # Make canvas the initial focus
         wx.CallAfter(self.canvas.SetFocus)
+        # Make canvas the initial focus
+        wx.CallAfter(self.canvas.SetFocus)
 
         ##################################################################
         # globals
@@ -259,7 +296,20 @@
         event.Skip()
 
     
###########################################################################
-    ## OnChar
+    ## OnQuit
+    
###########################################################################
+    def OnQuit(self, event):
+        self.frame.Close()
+        
+    
###########################################################################
+    ## OnAbout
+    
###########################################################################
+    def OnAbout(self, event):
+        wx.MessageBox("This is the Python GUI to the Manta Interactive Ray 
Tracer",
+                      "About Manta", wx.OK | wx.ICON_INFORMATION, self.frame)
+
+    
###########################################################################
+    ## FrameReady
     
###########################################################################
     def FrameReady(self):
         self.sync_display.renderFrame()
@@ -285,7 +335,7 @@
         self.mouse_is_down = True
         
         mouse_pos = event.GetPosition()
-        window_size = self.frame.GetSize()
+        window_size = self.canvas.GetSize()
         # You need to make sure that the results are floating point
         # instead of integer.
         xpos = 2.0*mouse_pos.x/window_size.width - 1.0
@@ -296,7 +346,7 @@
 
     def mouseRotate( self, event ):
         mouse_pos = event.GetPosition()
-        window_size = self.frame.GetSize()
+        window_size = self.canvas.GetSize()
         xpos = 2.0*mouse_pos.x/window_size.width - 1.0
         ypos = 1.0 - 2.0*mouse_pos.y/window_size.height
 
@@ -326,6 +376,13 @@
             z = math.sqrt(1-rad2)
             return Vector(x,y,z)
 
+    def updateFramerate(self, framerate):
+        text = ""
+        if (framerate > 1):
+            text = "%3.1lf fps" % framerate
+        else:
+            text = "%2.2lf fps - %3.1lf spf" % (framerate , 1.0/framerate);
+        self.frame.statusbar.SetStatusText(text, 0)
 
 app = App()
 app.MainLoop()




  • [MANTA] r1106 - trunk/SwigInterface, bigler, 06/08/2006

Archive powered by MHonArc 2.6.16.

Top of page