Text archives Help
- 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.