Revision: 3765
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=3765&view=rev
Author:   mdboom
Date:     2007-08-31 12:25:34 -0700 (Fri, 31 Aug 2007)

Log Message:
-----------
Render all the fonts in each mathtext expression to a single image buffer
(memory and time savings).
Add support for getting raw image data for mathtext expressions.
Add mathtext_wx.py example showing how to put mathtext expressions
into controls.

Added Paths:
-----------
    trunk/matplotlib/examples/mathtext_wx.py

Added: trunk/matplotlib/examples/mathtext_wx.py
===================================================================
--- trunk/matplotlib/examples/mathtext_wx.py                            (rev 0)
+++ trunk/matplotlib/examples/mathtext_wx.py    2007-08-31 19:25:34 UTC (rev 
3765)
@@ -0,0 +1,124 @@
+"""
+Demonstrates how to convert mathtext to a wx.Bitmap for display in various
+controls on wxPython.
+"""
+
+import matplotlib
+matplotlib.use("WxAgg")
+from matplotlib.numerix import arange, sin, pi, cos, log
+from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
+from matplotlib.backends.backend_wx import NavigationToolbar2Wx
+from matplotlib.figure import Figure
+
+import wx
+
+IS_GTK = 'wxGTK' in wx.PlatformInfo
+IS_WIN = 'wxMSW' in wx.PlatformInfo
+IS_MAC = 'wxMac' in wx.PlatformInfo
+
+############################################################
+# This is where the "magic" happens.
+from matplotlib.mathtext import MathTextParser
+mathtext_parser = MathTextParser("Bitmap")
+def mathtext_to_wxbitmap(s):
+    ftimage = mathtext_parser.parse(s, 150)
+    return wx.BitmapFromBufferRGBA(
+        ftimage.get_width(), ftimage.get_height(),
+        ftimage.as_rgba_str())
+############################################################
+
+functions = [
+    (r'$\sin(2 \pi x)$'      , lambda x: sin(2*pi*x)),
+    (r'$\frac{4}{3}\pi x^3$' , lambda x: (4.0 / 3.0) * pi * x**3),
+    (r'$\cos(2 \pi x)$'      , lambda x: cos(2*pi*x)),
+    (r'$\log x$'             , lambda x: log(x))
+]
+
+class CanvasFrame(wx.Frame):
+    def __init__(self, parent, title):
+        wx.Frame.__init__(self, parent, -1, title, size=(550, 350))
+        self.SetBackgroundColour(wx.NamedColor("WHITE"))
+
+        self.figure = Figure()
+        self.axes = self.figure.add_subplot(111)
+        self.change_plot(0)
+        
+        self.canvas = FigureCanvas(self, -1, self.figure)
+
+        self.sizer = wx.BoxSizer(wx.VERTICAL)
+        self.add_buttonbar()
+        self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
+        self.add_toolbar()  # comment this out for no toolbar
+        
+        menuBar = wx.MenuBar()
+
+        # File Menu
+        menu = wx.Menu()
+        menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Exit this simple sample")
+        menuBar.Append(menu, "&File")
+
+        if IS_GTK or IS_WIN:
+            # Equation Menu
+            menu = wx.Menu()
+            for i, (mt, func) in enumerate(functions):
+                bm = mathtext_to_wxbitmap(mt)
+                item = wx.MenuItem(menu, 1000 + i, "")
+                item.SetBitmap(bm)
+                menu.AppendItem(item)
+                self.Bind(wx.EVT_MENU, self.OnChangePlot, item)
+            menuBar.Append(menu, "&Functions")
+
+        self.SetMenuBar(menuBar)
+
+        self.SetSizer(self.sizer)
+        self.Fit()
+
+    def add_buttonbar(self):
+        self.button_bar = wx.Panel(self)
+        self.button_bar_sizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.sizer.Add(self.button_bar, 0, wx.LEFT | wx.TOP | wx.GROW)
+
+        for i, (mt, func) in enumerate(functions):
+            bm = mathtext_to_wxbitmap(mt)
+            button = wx.BitmapButton(self.button_bar, 1000 + i, bm)
+            self.button_bar_sizer.Add(button, 1, wx.GROW)
+            self.Bind(wx.EVT_BUTTON, self.OnChangePlot, button)
+
+        self.button_bar.SetSizer(self.button_bar_sizer)
+
+    def add_toolbar(self):
+        """Copied verbatim from embedding_wx2.py"""
+        self.toolbar = NavigationToolbar2Wx(self.canvas)
+        self.toolbar.Realize()
+        if IS_MAC:
+            self.SetToolBar(self.toolbar)
+        else:
+            tw, th = self.toolbar.GetSizeTuple()
+            fw, fh = self.canvas.GetSizeTuple()
+            self.toolbar.SetSize(wx.Size(fw, th))
+            self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
+        self.toolbar.update()
+
+    def OnPaint(self, event):
+        self.canvas.draw()
+
+    def OnChangePlot(self, event):
+        self.change_plot(event.GetId() - 1000)
+        
+    def change_plot(self, plot_number):
+        t = arange(1.0,3.0,0.01)
+        s = functions[plot_number][1](t)
+        self.axes.clear()
+        self.axes.plot(t, s)
+        self.Refresh()
+        
+class MyApp(wx.App):
+    def OnInit(self):
+        frame = CanvasFrame(None, "wxPython mathtext demo app")
+        self.SetTopWindow(frame)
+        frame.Show(True)
+        return True
+        
+app = MyApp()
+app.MainLoop()
+


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to