]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/FloatCanvas.py
Some little tweaks
[wxWidgets.git] / wxPython / demo / FloatCanvas.py
CommitLineData
5e1796ef 1#!/usr/bin/env python2.3
2a0495c9
RD
2
3import wx
4
5##First, make sure Numeric or numarray can be imported.
8b9a4190
RD
6try:
7 import Numeric
42463de2 8 import RandomArray
8b9a4190
RD
9 haveNumeric = True
10except ImportError:
2a0495c9 11 # Numeric isn't there, let's try numarray
42463de2
RD
12 try:
13 import numarray as Numeric
14 import numarray.random_array as RandomArray
15 haveNumeric = True
16 except ImportError:
2a0495c9 17 # numarray isn't there either
42463de2 18 haveNumeric = False
2a0495c9
RD
19 errorText = (
20 "The FloatCanvas requires either the Numeric or numarray module\n\n"
21 "You can get them at:\n"
22 "http://sourceforge.net/projects/numpy\n\n"
23 "NOTE: The Numeric module is substantially faster than numarray for this\n"
24 "purpose, if you have lots of objects\n"
25 )
26
2e839e96 27#---------------------------------------------------------------------------
34a544a6 28
2a0495c9 29def BuildDrawFrame(): # this gets called when needed, rather than on import
42463de2
RD
30 try:
31 from floatcanvas import NavCanvas, FloatCanvas
32 except ImportError: # if it's not there locally, try the wxPython lib.
33 from wx.lib.floatcanvas import NavCanvas, FloatCanvas
fbd5dd1d 34
2a0495c9
RD
35 import wx.lib.colourdb
36 import time, random
2e839e96 37
8fa876ca 38 class DrawFrame(wx.Frame):
2e839e96 39
8b9a4190 40 """
8b9a4190 41 A frame used for the FloatCanvas Demo
2e839e96 42
8b9a4190 43 """
2e839e96
RD
44
45
42463de2 46 def __init__(self,parent, id,title,position,size):
8fa876ca 47 wx.Frame.__init__(self,parent, id,title,position, size)
2e839e96 48
42463de2 49 ## Set up the MenuBar
8fa876ca 50 MenuBar = wx.MenuBar()
2e839e96 51
8fa876ca 52 file_menu = wx.Menu()
42463de2
RD
53 item = file_menu.Append(-1, "&Close","Close this frame")
54 self.Bind(wx.EVT_MENU, self.OnQuit, item)
8b9a4190 55 MenuBar.Append(file_menu, "&File")
2e839e96 56
8fa876ca 57 draw_menu = wx.Menu()
8fa876ca 58
42463de2
RD
59 item = draw_menu.Append(-1, "&Draw Test","Run a test of drawing random components")
60 self.Bind(wx.EVT_MENU, self.DrawTest, item)
61
62 item = draw_menu.Append(-1, "&Line Test","Run a test of drawing random lines")
63 self.Bind(wx.EVT_MENU, self.LineTest, item)
2e839e96 64
42463de2
RD
65 item = draw_menu.Append(-1, "Draw &Map","Run a test of drawing a map")
66 self.Bind(wx.EVT_MENU, self.DrawMap, item)
67 item = draw_menu.Append(-1, "&Text Test","Run a test of text drawing")
68 self.Bind(wx.EVT_MENU, self.TestText, item)
69 item = draw_menu.Append(-1, "&ScaledText Test","Run a test of text drawing")
70 self.Bind(wx.EVT_MENU, self.TestScaledText, item)
71 item = draw_menu.Append(-1, "&Clear","Clear the Canvas")
72 self.Bind(wx.EVT_MENU, self.Clear, item)
73 item = draw_menu.Append(-1, "&Hit Test","Run a test of the hit test code")
74 self.Bind(wx.EVT_MENU, self.TestHitTest, item)
5e1796ef 75 item = draw_menu.Append(-1, "Hit Test &Foreground","Run a test of the hit test code with a foreground Object")
42463de2
RD
76 self.Bind(wx.EVT_MENU, self.TestHitTestForeground, item)
77 item = draw_menu.Append(-1, "&Animation","Run a test of Animation")
78 self.Bind(wx.EVT_MENU, self.TestAnimation, item)
79 item = draw_menu.Append(-1, "&Speed","Run a test of Drawing Speed")
80 self.Bind(wx.EVT_MENU, self.SpeedTest, item)
5e1796ef
RD
81 item = draw_menu.Append(-1, "Change &Properties","Run a test of Changing Object Properties")
82 self.Bind(wx.EVT_MENU, self.PropertiesChangeTest, item)
2a0495c9
RD
83 item = draw_menu.Append(-1, "&Arrows","Run a test of Arrows")
84 self.Bind(wx.EVT_MENU, self.ArrowTest, item)
85
42463de2 86 MenuBar.Append(draw_menu, "&Tests")
2e839e96 87
8fa876ca 88 view_menu = wx.Menu()
42463de2
RD
89 item = view_menu.Append(-1, "Zoom to &Fit","Zoom to fit the window")
90 self.Bind(wx.EVT_MENU, self.ZoomToFit, item)
8b9a4190 91 MenuBar.Append(view_menu, "&View")
2e839e96 92
8fa876ca 93 help_menu = wx.Menu()
42463de2 94 item = help_menu.Append(-1, "&About",
8b9a4190 95 "More information About this program")
42463de2 96 self.Bind(wx.EVT_MENU, self.OnAbout, item)
8b9a4190 97 MenuBar.Append(help_menu, "&Help")
2e839e96 98
8b9a4190 99 self.SetMenuBar(MenuBar)
2e839e96 100
42463de2 101 self.CreateStatusBar()
8b9a4190 102 # Add the Canvas
42463de2
RD
103 self.Canvas = NavCanvas.NavCanvas(self,
104 -1,
105 (500,500),
5e1796ef 106 Debug = 0,
42463de2
RD
107 BackgroundColor = "DARK SLATE BLUE")
108
109 wx.EVT_CLOSE(self, self.OnCloseWindow)
110
111 FloatCanvas.EVT_MOTION(self.Canvas, self.OnMove )
112 #FloatCanvas.EVT_LEFT_UP(self.Canvas, self.OnLeftUp )
113
114 self.EventsAreBound = False
115
116 ## getting all the colors and linestyles for random objects
2a0495c9
RD
117 wx.lib.colourdb.updateColourDB()
118 self.colors = wx.lib.colourdb.getColourList()
42463de2
RD
119 #self.LineStyles = FloatCanvas.DrawObject.LineStyleList.keys()
120
121
8b9a4190 122 return None
42463de2
RD
123
124 def BindAllMouseEvents(self):
125 if not self.EventsAreBound:
126 ## Here is how you catch FloatCanvas mouse events
127 FloatCanvas.EVT_LEFT_DOWN(self.Canvas, self.OnLeftDown )
128 FloatCanvas.EVT_LEFT_UP(self.Canvas, self.OnLeftUp )
129 FloatCanvas.EVT_LEFT_DCLICK(self.Canvas, self.OnLeftDouble )
130
131 FloatCanvas.EVT_MIDDLE_DOWN(self.Canvas, self.OnMiddleDown )
132 FloatCanvas.EVT_MIDDLE_UP(self.Canvas, self.OnMiddleUp )
133 FloatCanvas.EVT_MIDDLE_DCLICK(self.Canvas, self.OnMiddleDouble )
134
135 FloatCanvas.EVT_RIGHT_DOWN(self.Canvas, self.OnRightDown )
136 FloatCanvas.EVT_RIGHT_UP(self.Canvas, self.OnRightUp )
137 FloatCanvas.EVT_RIGHT_DCLICK(self.Canvas, self.OnRightDouble )
138
139 FloatCanvas.EVT_MOUSEWHEEL(self.Canvas, self.OnWheel )
140 self.EventsAreBound = True
141
142 def UnBindAllMouseEvents(self):
2a0495c9
RD
143 ## Here is how you unbind FloatCanvas mouse events
144 FloatCanvas.EVT_LEFT_DOWN(self.Canvas, None )
145 FloatCanvas.EVT_LEFT_UP(self.Canvas, None )
146 FloatCanvas.EVT_LEFT_DCLICK(self.Canvas, None)
147
148 FloatCanvas.EVT_MIDDLE_DOWN(self.Canvas, None )
149 FloatCanvas.EVT_MIDDLE_UP(self.Canvas, None )
150 FloatCanvas.EVT_MIDDLE_DCLICK(self.Canvas, None )
151
152 FloatCanvas.EVT_RIGHT_DOWN(self.Canvas, None )
153 FloatCanvas.EVT_RIGHT_UP(self.Canvas, None )
154 FloatCanvas.EVT_RIGHT_DCLICK(self.Canvas, None )
155
156 FloatCanvas.EVT_MOUSEWHEEL(self.Canvas, None )
42463de2
RD
157 FloatCanvas.EVT_LEFT_DOWN(self.Canvas, None )
158 FloatCanvas.EVT_LEFT_UP(self.Canvas, None )
159 FloatCanvas.EVT_LEFT_DCLICK(self.Canvas, None)
160
161 FloatCanvas.EVT_MIDDLE_DOWN(self.Canvas, None )
162 FloatCanvas.EVT_MIDDLE_UP(self.Canvas, None )
163 FloatCanvas.EVT_MIDDLE_DCLICK(self.Canvas, None )
164
165 FloatCanvas.EVT_RIGHT_DOWN(self.Canvas, None )
166 FloatCanvas.EVT_RIGHT_UP(self.Canvas, None )
167 FloatCanvas.EVT_RIGHT_DCLICK(self.Canvas, None )
168
169 FloatCanvas.EVT_MOUSEWHEEL(self.Canvas, None )
170
171 self.EventsAreBound = False
172
173 def PrintCoords(self,event):
174 print "coords are: %s"%(event.Coords,)
175 print "pixel coords are: %s\n"%(event.GetPosition(),)
176
177 def OnLeftDown(self, event):
178 print "Left Button has been clicked in DrawFrame"
179 self.PrintCoords(event)
180
181 def OnLeftUp(self, event):
182 print "Left up in DrawFrame"
183 self.PrintCoords(event)
184
185 def OnLeftDouble(self, event):
186 print "Left Double Click in DrawFrame"
187 self.PrintCoords(event)
188
189 def OnMiddleDown(self, event):
190 print "Middle Button clicked in DrawFrame"
191 self.PrintCoords(event)
192
193 def OnMiddleUp(self, event):
194 print "Middle Button Up in DrawFrame"
195 self.PrintCoords(event)
196
197 def OnMiddleDouble(self, event):
198 print "Middle Button Double clicked in DrawFrame"
199 self.PrintCoords(event)
200
201 def OnRightDown(self, event):
8b9a4190 202 print "Right Button has been clicked in DrawFrame"
42463de2
RD
203 self.PrintCoords(event)
204
205 def OnRightUp(self, event):
206 print "Right Button Up in DrawFrame"
207 self.PrintCoords(event)
208
209 def OnRightDouble(self, event):
210 print "Right Button Double clicked in DrawFrame"
211 self.PrintCoords(event)
212
213 def OnWheel(self, event):
214 print "Mouse Wheel Moved in DrawFrame"
215 self.PrintCoords(event)
2a0495c9
RD
216 Rot = event.GetWheelRotation()
217 print "Wheel Rotation is:", Rot
218 print "Wheel Delta is:", event.GetWheelDelta()
219 Rot = Rot / abs(Rot) * 0.1
220 if event.ControlDown(): # move left-right
221 self.Canvas.MoveImage( (Rot, 0), "Panel" )
222 else: # move up-down
223 self.Canvas.MoveImage( (0, Rot), "Panel" )
224
42463de2
RD
225 def OnMove(self, event):
226 """
2a0495c9 227 Updates the status bar with the world coordinates
42463de2
RD
228 """
229 self.SetStatusText("%.2f, %.2f"%tuple(event.Coords))
230
8b9a4190 231 def OnAbout(self, event):
42463de2 232 print "OnAbout called"
2e839e96 233
8fa876ca 234 dlg = wx.MessageDialog(self, "This is a small program to demonstrate\n"
8b9a4190 235 "the use of the FloatCanvas\n",
8fa876ca 236 "About Me", wx.OK | wx.ICON_INFORMATION)
8b9a4190
RD
237 dlg.ShowModal()
238 dlg.Destroy()
2e839e96 239
8b9a4190
RD
240 def ZoomToFit(self,event):
241 self.Canvas.ZoomToBB()
2e839e96 242
8b9a4190 243 def Clear(self,event = None):
42463de2
RD
244 self.UnBindAllMouseEvents()
245 self.Canvas.ClearAll()
246 self.Canvas.SetProjectionFun(None)
8b9a4190 247 self.Canvas.Draw()
2e839e96 248
8b9a4190
RD
249 def OnQuit(self,event):
250 self.Close(True)
2e839e96 251
8b9a4190
RD
252 def OnCloseWindow(self, event):
253 self.Destroy()
2e839e96 254
42463de2 255 def DrawTest(self,event=None):
5e1796ef 256 wx.GetApp().Yield()
2a0495c9 257
8b9a4190 258 Range = (-10,10)
42463de2
RD
259 colors = self.colors
260
261 self.BindAllMouseEvents()
8b9a4190 262 Canvas = self.Canvas
42463de2
RD
263
264 Canvas.ClearAll()
265 Canvas.SetProjectionFun(None)
266
e0b86f07 267 ## Random tests of everything:
2e839e96 268
8b9a4190 269 # Rectangles
42463de2 270 for i in range(3):
8b9a4190
RD
271 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
272 lw = random.randint(1,5)
273 cf = random.randint(0,len(colors)-1)
274 h = random.randint(1,5)
275 w = random.randint(1,5)
5e1796ef 276 Canvas.AddRectangle(x,y,w,h,LineWidth = lw,FillColor = colors[cf])
2e839e96 277
42463de2
RD
278 # Ellipses
279 for i in range(3):
8b9a4190
RD
280 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
281 lw = random.randint(1,5)
282 cf = random.randint(0,len(colors)-1)
283 h = random.randint(1,5)
284 w = random.randint(1,5)
42463de2 285 Canvas.AddEllipse(x,y,h,w,LineWidth = lw,FillColor = colors[cf])
2e839e96 286
5e1796ef
RD
287 # Points
288 for i in range(5):
289 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
290 D = random.randint(1,50)
291 cf = random.randint(0,len(colors)-1)
292 Canvas.AddPoint((x,y), Color = colors[cf], Diameter = D)
2a0495c9 293 # Circles
8b9a4190
RD
294 for i in range(5):
295 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
296 D = random.randint(1,5)
297 lw = random.randint(1,5)
298 cf = random.randint(0,len(colors)-1)
299 cl = random.randint(0,len(colors)-1)
42463de2
RD
300 Canvas.AddCircle(x,y,D,LineWidth = lw,LineColor = colors[cl],FillColor = colors[cf])
301 Canvas.AddText("Circle # %i"%(i),x,y,Size = 12,BackgroundColor = None,Position = "cc")
2a0495c9 302 # Lines
8b9a4190
RD
303 for i in range(5):
304 points = []
305 for j in range(random.randint(2,10)):
306 point = (random.randint(Range[0],Range[1]),random.randint(Range[0],Range[1]))
307 points.append(point)
308 lw = random.randint(1,10)
309 cf = random.randint(0,len(colors)-1)
310 cl = random.randint(0,len(colors)-1)
42463de2 311 Canvas.AddLine(points, LineWidth = lw, LineColor = colors[cl])
2a0495c9 312 # Polygons
8b9a4190
RD
313 for i in range(3):
314 points = []
315 for j in range(random.randint(2,6)):
316 point = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
317 points.append(point)
318 lw = random.randint(1,6)
319 cf = random.randint(0,len(colors)-1)
320 cl = random.randint(0,len(colors)-1)
42463de2
RD
321 Canvas.AddPolygon(points,
322 LineWidth = lw,
323 LineColor = colors[cl],
324 FillColor = colors[cf],
325 FillStyle = 'Solid')
2e839e96 326
8b9a4190
RD
327 ## Pointset
328 for i in range(4):
329 points = []
330 points = RandomArray.uniform(Range[0],Range[1],(100,2))
331 cf = random.randint(0,len(colors)-1)
332 D = random.randint(1,4)
42463de2 333 Canvas.AddPointSet(points, Color = colors[cf], Diameter = D)
2e839e96 334
8b9a4190 335 # Text
42463de2
RD
336 String = "Unscaled text"
337 for i in range(3):
8b9a4190
RD
338 ts = random.randint(10,40)
339 cf = random.randint(0,len(colors)-1)
340 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
42463de2
RD
341 Canvas.AddText(String, x, y, Size = ts, Color = colors[cf], Position = "cc")
342
343 # Scaled Text
344 String = "Scaled text"
345 for i in range(3):
346 ts = random.random()*3 + 0.2
347 cf = random.randint(0,len(colors)-1)
348 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
349 Canvas.AddScaledText(String, x, y, Size = ts, Color = colors[cf], Position = "cc")
350
2a0495c9
RD
351 # Arrows
352 N = 5
353 Points = RandomArray.uniform(Range[0], Range[1], (N,2) )
354 for i in range(N):
355 Canvas.AddArrow(Points[i],
356 random.uniform(20,100),
357 Direction = random.uniform(0,360),
358 LineWidth = random.uniform(1,5),
359 LineColor = colors[random.randint(0,len(colors)-1)],
360 ArrowHeadAngle = random.uniform(20,90))
361
42463de2
RD
362 Canvas.ZoomToBB()
363
364 def TestAnimation(self,event=None):
365 """
366
367 In this test, a relatively complex background is drawn, and
368 a simple object placed in the foreground is moved over
369 it. This demonstrates how to use the InForeground attribute
370 to make an object in the foregorund draw fast, without
371 having to re-draw the whole background.
372
373 """
5e1796ef 374 wx.GetApp().Yield()
42463de2
RD
375 Range = (-10,10)
376 self.Range = Range
377
378 self.UnBindAllMouseEvents()
379 Canvas = self.Canvas
380
381 Canvas.ClearAll()
382 Canvas.SetProjectionFun(None)
383
e0b86f07 384 ## Random tests of everything:
42463de2
RD
385 colors = self.colors
386 # Rectangles
387 for i in range(3):
388 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
389 lw = random.randint(1,5)
390 cf = random.randint(0,len(colors)-1)
391 h = random.randint(1,5)
392 w = random.randint(1,5)
393 Canvas.AddRectangle(x,y,h,w,LineWidth = lw,FillColor = colors[cf])
2e839e96 394
42463de2
RD
395 # Ellipses
396 for i in range(3):
397 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
398 lw = random.randint(1,5)
399 cf = random.randint(0,len(colors)-1)
400 h = random.randint(1,5)
401 w = random.randint(1,5)
402 Canvas.AddEllipse(x,y,h,w,LineWidth = lw,FillColor = colors[cf])
2e839e96 403
42463de2
RD
404 # Circles
405 for i in range(5):
406 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
407 D = random.randint(1,5)
408 lw = random.randint(1,5)
409 cf = random.randint(0,len(colors)-1)
410 cl = random.randint(0,len(colors)-1)
411 Canvas.AddCircle(x,y,D,LineWidth = lw,LineColor = colors[cl],FillColor = colors[cf])
412 Canvas.AddText("Circle # %i"%(i),x,y,Size = 12,BackgroundColor = None,Position = "cc")
2e839e96 413
42463de2
RD
414 # Lines
415 for i in range(5):
416 points = []
417 for j in range(random.randint(2,10)):
418 point = (random.randint(Range[0],Range[1]),random.randint(Range[0],Range[1]))
419 points.append(point)
420 lw = random.randint(1,10)
421 cf = random.randint(0,len(colors)-1)
422 cl = random.randint(0,len(colors)-1)
423 Canvas.AddLine(points, LineWidth = lw, LineColor = colors[cl])
2e839e96 424
42463de2
RD
425 # Polygons
426 for i in range(3):
427 points = []
428 for j in range(random.randint(2,6)):
429 point = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
430 points.append(point)
431 lw = random.randint(1,6)
432 cf = random.randint(0,len(colors)-1)
433 cl = random.randint(0,len(colors)-1)
434 Canvas.AddPolygon(points,
435 LineWidth = lw,
436 LineColor = colors[cl],
437 FillColor = colors[cf],
438 FillStyle = 'Solid')
2e839e96 439
42463de2
RD
440 # Scaled Text
441 String = "Scaled text"
442 for i in range(3):
443 ts = random.random()*3 + 0.2
444 cf = random.randint(0,len(colors)-1)
445 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
446 Canvas.AddScaledText(String, x, y, Size = ts, Color = colors[cf], Position = "cc")
447
448
449 # Now the Foreground Object:
450 C = Canvas.AddCircle(0,0,7,LineWidth = 2,LineColor = "Black",FillColor = "Red", InForeground = True)
5e1796ef 451 T = Canvas.AddScaledText("Click to Move",0,0, Size = 0.6, Position = 'cc', InForeground = True)
42463de2
RD
452 C.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.MoveMe)
453 C.Text = T
454
455 self.Timer = wx.PyTimer(self.ShowFrame)
456 self.FrameDelay = 50 # milliseconds
2e839e96 457
42463de2
RD
458 Canvas.ZoomToBB()
459
460 def ShowFrame(self):
461 Object = self.MovingObject
462 Range = self.Range
463 if self.TimeStep < self.NumTimeSteps:
464 x,y = Object.XY
465 if x > Range[1] or x < Range[0]:
466 self.dx = -self.dx
467 if y > Range[1] or y < Range[0]:
468 self.dy = -self.dy
469 Object.Move( (self.dx,self.dy) )
470 Object.Text.Move( (self.dx,self.dy))
471 self.Canvas.Draw()
472 self.TimeStep += 1
5e1796ef 473 wx.GetApp().Yield(True)
42463de2
RD
474 else:
475 self.Timer.Stop()
2e839e96 476
42463de2
RD
477
478 def MoveMe(self, Object):
479 self.MovingObject = Object
480 Range = self.Range
481 self.dx = random.uniform(Range[0]/4,Range[1]/4)
482 self.dy = random.uniform(Range[0]/4,Range[1]/4)
483 #import time
484 #start = time.time()
5e1796ef 485 self.NumTimeSteps = 200
42463de2
RD
486 self.TimeStep = 1
487 self.Timer.Start(self.FrameDelay)
488 #print "Did %i frames in %f seconds"%(N, (time.time() - start) )
2e839e96 489
42463de2 490 def TestHitTest(self,event=None):
5e1796ef 491 wx.GetApp().Yield()
42463de2
RD
492
493 self.UnBindAllMouseEvents()
494 Canvas = self.Canvas
495
496 Canvas.ClearAll()
497 Canvas.SetProjectionFun(None)
498
2a0495c9 499 #Add a Hit-able rectangle
42463de2
RD
500 w, h = 60, 20
501
502 dx = 80
503 dy = 40
504 x,y = 20, 20
5e1796ef 505 FontSize = 8
2e839e96 506
42463de2
RD
507 #Add one that is not HitAble
508 Canvas.AddRectangle(x, y, w, h, LineWidth = 2)
5e1796ef 509 Canvas.AddText("Not Hit-able", x, y, Size = FontSize, Position = "bl")
2e839e96 510
42463de2
RD
511
512 x += dx
5e1796ef 513 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2)
42463de2
RD
514 R.Name = "Line Rectangle"
515 R.HitFill = False
5e1796ef 516 R.HitLineWidth = 5 # Makes it a little easier to hit
42463de2 517 R.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectGotHit)
5e1796ef
RD
518 Canvas.AddText("Left Click Line", x, y, Size = FontSize, Position = "bl")
519 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
520
521 x += dx
522 color = "Red"
523 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color)
524 R.Name = color + "Rectangle"
525 R.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectGotHit)
5e1796ef
RD
526 Canvas.AddText("Left Click Fill", x, y, Size = FontSize, Position = "bl")
527 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
528
529 x = 20
530 y += dy
531 color = "LightBlue"
532 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color)
533 R.Name = color + " Rectangle"
534 R.Bind(FloatCanvas.EVT_FC_RIGHT_DOWN, self.RectGotHit)
535 Canvas.AddText("Right Click Fill", x, y, Position = "bl")
5e1796ef 536 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
537
538 x += dx
539 color = "Grey"
540 R = Canvas.AddEllipse(x, y, w, h,LineWidth = 2,FillColor = color)
541 R.Name = color +" Ellipse"
542 R.Bind(FloatCanvas.EVT_FC_RIGHT_DOWN, self.RectGotHit)
5e1796ef
RD
543 Canvas.AddText("Right Click Fill", x, y, Size = FontSize, Position = "bl")
544 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
545
546 x += dx
547 color = "Brown"
548 R = Canvas.AddCircle(x+dx/2, y+dy/2, dx/4, LineWidth = 2, FillColor = color)
549 R.Name = color + " Circle"
550 R.HitFill = True
551 R.Bind(FloatCanvas.EVT_FC_LEFT_DCLICK, self.RectGotHit)
5e1796ef
RD
552 Canvas.AddText("Left D-Click Fill", x, y, Size = FontSize, Position = "bl")
553 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
554
555 x = 20
556 y += dy
557 color = "Pink"
558 R = Canvas.AddCircle(x+dx/2, y+dy/2, dx/4, LineWidth = 2,FillColor = color)
559 R.Name = color + " Circle"
560 R.Bind(FloatCanvas.EVT_FC_LEFT_UP, self.RectGotHit)
5e1796ef
RD
561 Canvas.AddText("Left Up Fill", x, y, Size = FontSize, Position = "bl")
562 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
563
564 x += dx
565 color = "White"
566 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color)
567 R.Name = color + " Rectangle"
568 R.Bind(FloatCanvas.EVT_FC_MIDDLE_DOWN, self.RectGotHit)
5e1796ef
RD
569 Canvas.AddText("Middle Down", x, y, Size = FontSize, Position = "bl")
570 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
571
572 x += dx
573 color = "AQUAMARINE"
574 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color)
575 R.Name = color + " Rectangle"
576 R.Bind(FloatCanvas.EVT_FC_MIDDLE_UP, self.RectGotHit)
5e1796ef
RD
577 Canvas.AddText("Middle Up", x, y, Size = FontSize, Position = "bl")
578 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
579
580 x = 20
581 y += dy
582 color = "CORAL"
583 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color)
584 R.Name = color + " Rectangle"
585 R.Bind(FloatCanvas.EVT_FC_MIDDLE_DCLICK, self.RectGotHit)
5e1796ef
RD
586 Canvas.AddText("Middle DoubleClick", x, y, Size = FontSize, Position = "bl")
587 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
588
589 x += dx
590 color = "CYAN"
591 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color)
592 R.Name = color + " Rectangle"
593 R.Bind(FloatCanvas.EVT_FC_RIGHT_UP, self.RectGotHit)
5e1796ef
RD
594 Canvas.AddText("Right Up", x, y, Size = FontSize, Position = "bl")
595 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
596
597 x += dx
598 color = "LIME GREEN"
599 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color)
600 R.Name = color + " Rectangle"
601 R.Bind(FloatCanvas.EVT_FC_RIGHT_DCLICK, self.RectGotHit)
5e1796ef
RD
602 Canvas.AddText("Right Double Click", x, y, Size = FontSize, Position = "bl")
603 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
604
605 x = 20
606 y += dy
607 color = "MEDIUM GOLDENROD"
608 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color)
609 R.Name = color
610 R.Bind(FloatCanvas.EVT_FC_RIGHT_DOWN, self.RectGotHitRight)
611 R.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectGotHitLeft)
5e1796ef
RD
612 Canvas.AddText("L and R Click", x, y, Size = FontSize, Position = "bl")
613 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
614
615 x += dx
616 color = "SALMON"
617 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color)
618 R.Name = color + " Rectangle"
619 R.Bind(FloatCanvas.EVT_FC_ENTER_OBJECT, self.RectMouseOver)
5e1796ef
RD
620 Canvas.AddText("Mouse Enter", x, y, Size = FontSize, Position = "bl")
621 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
622
623 x += dx
624 color = "MEDIUM VIOLET RED"
625 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color)
626 R.Name = color
627 R.Bind(FloatCanvas.EVT_FC_LEAVE_OBJECT, self.RectMouseLeave)
5e1796ef
RD
628 Canvas.AddText("Mouse Leave", x, y, Size = FontSize, Position = "bl")
629 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
630
631 x = 20
632 y += dy
633 color = "SKY BLUE"
634 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color)
635 R.Name = color
636 R.Bind(FloatCanvas.EVT_FC_ENTER_OBJECT, self.RectMouseOver)
637 R.Bind(FloatCanvas.EVT_FC_LEAVE_OBJECT, self.RectMouseLeave)
5e1796ef
RD
638 Canvas.AddText("Enter and Leave", x, y, Size = FontSize, Position = "bl")
639 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
640
641 x += dx
642 color = "WHEAT"
643 R = Canvas.AddRectangle(x, y, w+12, h, LineColor = None, FillColor = color)
644 R.Name = color
645 R.Bind(FloatCanvas.EVT_FC_ENTER_OBJECT, self.RectMouseOver)
646 R.Bind(FloatCanvas.EVT_FC_LEAVE_OBJECT, self.RectMouseLeave)
5e1796ef
RD
647 Canvas.AddText("Mouse Enter&Leave", x, y, Size = FontSize, Position = "bl")
648 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
649
650 x += dx
651 color = "KHAKI"
652 R = Canvas.AddRectangle(x-12, y, w+12, h, LineColor = None, FillColor = color)
653 R.Name = color
654 R.Bind(FloatCanvas.EVT_FC_ENTER_OBJECT, self.RectMouseOver)
655 R.Bind(FloatCanvas.EVT_FC_LEAVE_OBJECT, self.RectMouseLeave)
5e1796ef
RD
656 Canvas.AddText("Mouse ENter&Leave", x, y, Size = FontSize, Position = "bl")
657 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
658
659 x = 20
660 y += dy
661 L = Canvas.AddLine(( (x, y), (x+10, y+10), (x+w, y+h) ), LineWidth = 2, LineColor = "Red")
662 L.Name = "A Line"
663 L.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectGotHitLeft)
5e1796ef
RD
664 Canvas.AddText("Left Down", x, y, Size = FontSize, Position = "bl")
665 Canvas.AddText(L.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
666
667 x += dx
668 color = "SEA GREEN"
669 Points = Numeric.array(( (x, y), (x, y+2.*h/3), (x+w, y+h), (x+w, y+h/2.), (x + 2.*w/3, y+h/2.), (x + 2.*w/3,y) ), Numeric.Float)
670 R = Canvas.AddPolygon(Points, LineWidth = 2, FillColor = color)
671 R.Name = color + " Polygon"
672 R.Bind(FloatCanvas.EVT_FC_RIGHT_DOWN, self.RectGotHitRight)
5e1796ef
RD
673 Canvas.AddText("RIGHT_DOWN", x, y, Size = FontSize, Position = "bl")
674 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
675
676 x += dx
677 color = "Red"
678 Points = Numeric.array(( (x, y), (x, y+2.*h/3), (x+w, y+h), (x+w, y+h/2.), (x + 2.*w/3, y+h/2.), (x + 2.*w/3,y) ), Numeric.Float)
679 R = Canvas.AddPointSet(Points, Diameter = 4, Color = color)
680 R.Name = "PointSet"
681 R.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.PointSetGotHit)
5e1796ef
RD
682 Canvas.AddText("LEFT_DOWN", x, y, Size = FontSize, Position = "bl")
683 Canvas.AddText(R.Name, x, y+h, Size = FontSize, Position = "tl")
42463de2
RD
684
685 x = 20
686 y += dy
687 T = Canvas.AddText("Hit-able Text", x, y, Size = 15, Color = "Red", Position = 'tl')
688 T.Name = "Hit-able Text"
689 T.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectGotHitLeft)
5e1796ef 690 Canvas.AddText("Left Down", x, y, Size = FontSize, Position = "bl")
42463de2
RD
691
692 x += dx
693 T = Canvas.AddScaledText("Scaled Text", x, y, Size = 1./2*h, Color = "Pink", Position = 'bl')
694 Canvas.AddPointSet( (x, y), Diameter = 3)
695 T.Name = "Scaled Text"
696 T.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectGotHitLeft)
5e1796ef 697 Canvas.AddText("Left Down", x, y, Size = FontSize, Position = "tl")
42463de2
RD
698
699 self.Canvas.ZoomToBB()
700
701 def TestHitTestForeground(self,event=None):
5e1796ef 702 wx.GetApp().Yield()
42463de2
RD
703
704 self.UnBindAllMouseEvents()
705 Canvas = self.Canvas
706
707 Canvas.ClearAll()
708 Canvas.SetProjectionFun(None)
709
710 #Add a Hitable rectangle
711 w, h = 60, 20
712
713 dx = 80
714 dy = 40
715 x,y = 20, 20
2e839e96 716
42463de2
RD
717 color = "Red"
718 R = Canvas.AddRectangle(x, y, w, h, LineWidth = 2, FillColor = color, InForeground = False)
719 R.Name = color + "Rectangle"
720 R.HitFill = True
721 R.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectGotHit)
722 Canvas.AddText("Left Click Fill", x, y, Position = "bl")
723 Canvas.AddText(R.Name, x, y+h, Position = "tl")
724
725 ## A set of Rectangles that move together
2e839e96 726
42463de2
RD
727 ## NOTE: In a real app, it might be better to create a new
728 ## custom FloatCanvas DrawObject
2e839e96 729
42463de2
RD
730 self.MovingRects = []
731 x += dx
732 color = "LightBlue"
733 R = Canvas.AddRectangle(x, y, w/2, h/2, LineWidth = 2, FillColor = color, InForeground = True)
734 R.HitFill = True
735 R.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectMoveLeft)
736 L = Canvas.AddText("Left", x + w/4, y + h/4, Position = "cc", InForeground = True)
737 self.MovingRects.extend( (R,L) )
738
739 x += w/2
740 R = Canvas.AddRectangle(x, y, w/2, h/2, LineWidth = 2, FillColor = color, InForeground = True)
741 R.HitFill = True
742 R.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectMoveRight)
743 L = Canvas.AddText("Right", x + w/4, y + h/4, Position = "cc", InForeground = True)
744 self.MovingRects.extend( (R,L) )
745
746 x -= w/2
747 y += h/2
748 R = Canvas.AddRectangle(x, y, w/2, h/2, LineWidth = 2, FillColor = color, InForeground = True)
749 R.HitFill = True
750 R.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectMoveUp)
751 L = Canvas.AddText("Up", x + w/4, y + h/4, Position = "cc", InForeground = True)
752 self.MovingRects.extend( (R,L) )
753
754
755 x += w/2
756 R = Canvas.AddRectangle(x, y, w/2, h/2, LineWidth = 2, FillColor = color, InForeground = True)
757 R.HitFill = True
758 R.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RectMoveDown)
759 L = Canvas.AddText("Down", x + w/4, y + h/4, Position = "cc", InForeground = True)
760 self.MovingRects.extend( (R,L) )
761
762 self.Canvas.ZoomToBB()
763
764 def RectMoveLeft(self,Object):
765 self.MoveRects("left")
2e839e96 766
42463de2
RD
767 def RectMoveRight(self,Object):
768 self.MoveRects("right")
2e839e96 769
42463de2
RD
770 def RectMoveUp(self,Object):
771 self.MoveRects("up")
2e839e96 772
42463de2
RD
773 def RectMoveDown(self,Object):
774 self.MoveRects("down")
2e839e96 775
42463de2
RD
776 def MoveRects(self, Dir):
777 for Object in self.MovingRects:
778 X,Y = Object.XY
779 if Dir == "left": X -= 10
780 elif Dir == "right": X += 10
781 elif Dir == "up": Y += 10
782 elif Dir == "down": Y -= 10
783 Object.SetXY(X,Y)
784 self.Canvas.Draw()
2e839e96
RD
785
786
42463de2
RD
787 def PointSetGotHit(self, Object):
788 print Object.Name, "Got Hit\n"
789
790 def RectGotHit(self, Object):
791 print Object.Name, "Got Hit\n"
792
793 def RectGotHitRight(self, Object):
794 print Object.Name, "Got Hit With Right\n"
795
796 def RectGotHitLeft(self, Object):
797 print Object.Name, "Got Hit with Left\n"
798
799 def RectMouseOver(self, Object):
800 print "Mouse entered:", Object.Name
801
802 def RectMouseLeave(self, Object):
803 print "Mouse left ", Object.Name
804
805
806 def TestText(self, event= None):
5e1796ef 807 wx.GetApp().Yield()
42463de2
RD
808
809 self.BindAllMouseEvents()
810 Canvas = self.Canvas
811 Canvas.ClearAll()
812 Canvas.SetProjectionFun(None)
813
814 x,y = (0, 0)
815
816 ## Add a non-visible rectangle, just to get a Bounding Box
817 ## Text objects have a zero-size bounding box, because it changes with zoom
818 Canvas.AddRectangle(-10,-10,20,20,LineWidth = 1, LineColor = None)
819
820 # Text
821 String = "Some text"
42463de2
RD
822 self.Canvas.AddText("Top Left",x,y,Size = 14,Color = "Yellow",BackgroundColor = "Blue", Position = "tl")
823 self.Canvas.AddText("Bottom Left",x,y,Size = 14,Color = "Cyan",BackgroundColor = "Black",Position = "bl")
824 self.Canvas.AddText("Top Right",x,y,Size = 14,Color = "Black",BackgroundColor = "Cyan",Position = "tr")
825 self.Canvas.AddText("Bottom Right",x,y,Size = 14,Color = "Blue",BackgroundColor = "Yellow",Position = "br")
826 Canvas.AddPointSet((x,y), Color = "White", Diameter = 2)
827
828 x,y = (0, 2)
2e839e96 829
42463de2
RD
830 Canvas.AddPointSet((x,y), Color = "White", Diameter = 2)
831 self.Canvas.AddText("Top Center",x,y,Size = 14,Color = "Black",Position = "tc")
832 self.Canvas.AddText("Bottom Center",x,y,Size = 14,Color = "White",Position = "bc")
833
834 x,y = (0, 4)
2e839e96 835
42463de2
RD
836 Canvas.AddPointSet((x,y), Color = "White", Diameter = 2)
837 self.Canvas.AddText("Center Right",x,y,Size = 14,Color = "Black",Position = "cr")
838 self.Canvas.AddText("Center Left",x,y,Size = 14,Color = "Black",Position = "cl")
839
840 x,y = (0, -2)
2e839e96 841
42463de2
RD
842 Canvas.AddPointSet((x,y), Color = "White", Diameter = 2)
843 self.Canvas.AddText("Center Center",x,y,Size = 14,Color = "Black",Position = "cc")
844
845 self.Canvas.AddText("40 Pixels",-10,8,Size = 40)
846 self.Canvas.AddText("20 Pixels",-10,5,Size = 20)
847 self.Canvas.AddText("10 Pixels",-10,3,Size = 10)
848
849 self.Canvas.AddText("MODERN Font", -10, 0, Family = wx.MODERN)
850 self.Canvas.AddText("DECORATIVE Font", -10, -1, Family = wx.DECORATIVE)
851 self.Canvas.AddText("ROMAN Font", -10, -2, Family = wx.ROMAN)
852 self.Canvas.AddText("SCRIPT Font", -10, -3, Family = wx.SCRIPT)
853 self.Canvas.AddText("ROMAN BOLD Font", -10, -4, Family = wx.ROMAN, Weight=wx.BOLD)
854 self.Canvas.AddText("ROMAN ITALIC BOLD Font", -10, -5, Family = wx.ROMAN, Weight=wx.BOLD, Style=wx.ITALIC)
855
856 # NOTE: this font exists on my Linux box..who knows were else you'll find it!
857 Font = wx.Font(20, wx.DEFAULT, wx.ITALIC, wx.NORMAL, False, "zapf chancery")
858 self.Canvas.AddText("zapf chancery Font", -10, -6, Font = Font)
859
860 self.Canvas.ZoomToBB()
861
862 def TestScaledText(self, event= None):
5e1796ef 863 wx.GetApp().Yield()
42463de2
RD
864
865 self.BindAllMouseEvents()
866 Canvas = self.Canvas
867 Canvas.ClearAll()
868 Canvas.SetProjectionFun(None)
869
870 x,y = (0, 0)
871
872 T = Canvas.AddScaledText("Top Left",x,y,Size = 5,Color = "Yellow",BackgroundColor = "Blue", Position = "tl")
873 T = Canvas.AddScaledText("Bottom Left",x,y,Size = 5,Color = "Cyan",BackgroundColor = "Black",Position = "bl")
874 T = Canvas.AddScaledText("Top Right",x,y,Size = 5,Color = "Black",BackgroundColor = "Cyan",Position = "tr")
875 T = Canvas.AddScaledText("Bottom Right",x,y,Size = 5,Color = "Blue",BackgroundColor = "Yellow",Position = "br")
876 Canvas.AddPointSet((x,y), Color = "Red", Diameter = 4)
877
878
879 x,y = (0, 20)
2e839e96 880
42463de2
RD
881 Canvas.AddScaledText("Top Center",x,y,Size = 7,Color = "Black",Position = "tc")
882 Canvas.AddScaledText("Bottom Center",x,y,Size = 7,Color = "White",Position = "bc")
883 Canvas.AddPointSet((x,y), Color = "White", Diameter = 4)
884
885 x,y = (0, -20)
2e839e96 886
42463de2
RD
887 Canvas.AddScaledText("Center Right",x,y,Size = 9,Color = "Black",Position = "cr")
888 Canvas.AddScaledText("Center Left",x,y,Size = 9,Color = "Black",Position = "cl")
889 Canvas.AddPointSet((x,y), Color = "White", Diameter = 4)
890
891 x = -200
892
893 self.Canvas.AddScaledText("MODERN Font", x, 0, Size = 7, Family = wx.MODERN, Color = (0,0,0))
894 self.Canvas.AddScaledText("DECORATIVE Font", x, -10, Size = 7, Family = wx.DECORATIVE, Color = (0,0,1))
895 self.Canvas.AddScaledText("ROMAN Font", x, -20, Size = 7, Family = wx.ROMAN)
896 self.Canvas.AddScaledText("SCRIPT Font", x, -30, Size = 7, Family = wx.SCRIPT)
897 self.Canvas.AddScaledText("ROMAN BOLD Font", x, -40, Size = 7, Family = wx.ROMAN, Weight=wx.BOLD)
898 self.Canvas.AddScaledText("ROMAN ITALIC BOLD Font", x, -50, Size = 7, Family = wx.ROMAN, Weight=wx.BOLD, Style=wx.ITALIC)
899 Canvas.AddPointSet((x,0), Color = "White", Diameter = 4)
900
901
902 # NOTE: this font exists on my Linux box..who knows were else you'll find it!
903 x,y = (-100, 50)
904 Font = wx.Font(12, wx.DEFAULT, wx.ITALIC, wx.NORMAL, False, "zapf chancery")
905 T = self.Canvas.AddScaledText("zapf chancery Font", x, y, Size = 20, Font = Font, Position = 'bc')
906
907 x,y = (-50, -50)
908 Font = wx.Font(12, wx.DEFAULT, wx.ITALIC, wx.NORMAL, False, "bookman")
909 T = self.Canvas.AddScaledText("Bookman Font", x, y, Size = 8, Font = Font)
910
8b9a4190 911 self.Canvas.ZoomToBB()
2e839e96 912
8b9a4190 913 def DrawMap(self,event = None):
5e1796ef 914 wx.GetApp().Yield()
8b9a4190 915 import os, time
42463de2 916 self.BindAllMouseEvents()
2e839e96 917
8b9a4190 918 ## Test of Actual Map Data
42463de2
RD
919 self.Canvas.ClearAll()
920 self.Canvas.SetProjectionFun("FlatEarth")
921 #start = time.clock()
2a0495c9 922 Shorelines = self.Read_MapGen(os.path.join("data",'world.dat'),stats = 0)
42463de2
RD
923 #print "It took %f seconds to load %i shorelines"%(time.clock() - start,len(Shorelines) )
924 #start = time.clock()
8b9a4190 925 for segment in Shorelines:
42463de2
RD
926 self.Canvas.AddLine(segment)
927 #print "It took %f seconds to add %i shorelines"%(time.clock() - start,len(Shorelines) )
928 #start = time.clock()
8b9a4190 929 self.Canvas.ZoomToBB()
42463de2 930 #print "It took %f seconds to draw %i shorelines"%(time.clock() - start,len(Shorelines) )
2e839e96
RD
931
932
8b9a4190 933 def LineTest(self,event = None):
5e1796ef 934 wx.GetApp().Yield()
8b9a4190 935 import os, time
42463de2
RD
936# import random
937 colors = self.colors
8b9a4190
RD
938 Range = (-10,10)
939 ## Test of drawing lots of lines
42463de2
RD
940 Canvas = self.Canvas
941 Canvas.ClearAll()
942 Canvas.SetProjectionFun(None)
943 #start = time.clock()
8b9a4190
RD
944 linepoints = []
945 linecolors = []
946 linewidths = []
947 for i in range(2000):
948 points = (random.randint(Range[0],Range[1]),
949 random.randint(Range[0],Range[1]),
950 random.randint(Range[0],Range[1]),
951 random.randint(Range[0],Range[1]))
952 linepoints.append(points)
953 linewidths.append(random.randint(1,10) )
954 linecolors.append(random.randint(0,len(colors)-1) )
955 for (points,color,width) in zip(linepoints,linecolors,linewidths):
42463de2
RD
956 Canvas.AddLine((points[0:2],points[2:4]), LineWidth = width, LineColor = colors[color])
957 #print "It took %f seconds to add %i lines"%(time.clock() - start,len(linepoints) )
958 #start = time.clock()
959 Canvas.ZoomToBB()
960 #print "It took %f seconds to draw %i lines"%(time.clock() - start,len(linepoints) )
961
962 def SpeedTest(self,event=None):
5e1796ef 963 wx.GetApp().Yield()
42463de2
RD
964 BigRange = (-1000,1000)
965 colors = self.colors
966
967 self.UnBindAllMouseEvents()
968 Canvas = self.Canvas
969
970 Canvas.ClearAll()
971 Canvas.SetProjectionFun(None)
972
5e1796ef 973 # Pointset
42463de2 974 coords = []
5e1796ef 975 for i in range(1000):
42463de2
RD
976 x,y = (random.uniform(BigRange[0],BigRange[1]),random.uniform(BigRange[0],BigRange[1]))
977 coords.append( (x,y) )
5e1796ef 978 print "Drawing the Points"
8b9a4190 979 start = time.clock()
5e1796ef
RD
980 for Point in coords:
981 Canvas.AddPoint(Point, Diameter = 4)
982 print "It took %s seconds to add the points"%(time.clock() - start)
983 Canvas.ZoomToBB()
984
985 def PropertiesChangeTest(self,event=None):
986 wx.GetApp().Yield()
987
988 Range = (-10,10)
989 colors = self.colors
990
991 self.UnBindAllMouseEvents()
992 Canvas = self.Canvas
993
994 Canvas.ClearAll()
995 Canvas.SetProjectionFun(None)
996
997 self.ColorObjectsAll = []
998 self.ColorObjectsLine = []
999 self.ColorObjectsColor = []
1000 self.ColorObjectsText = []
1001 ##One of each object:
1002 # Rectangle
1003 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
1004 lw = random.randint(1,5)
1005 cf = random.randint(0,len(colors)-1)
1006 h = random.randint(1,5)
1007 w = random.randint(1,5)
1008 self.Rectangle = Canvas.AddRectangle(x,y,w,h,LineWidth = lw,FillColor = colors[cf])
1009 self.ColorObjectsAll.append(self.Rectangle)
2e839e96 1010
5e1796ef
RD
1011 # Ellipse
1012 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
1013 lw = random.randint(1,5)
1014 cf = random.randint(0,len(colors)-1)
1015 h = random.randint(1,5)
1016 w = random.randint(1,5)
1017 self.Ellipse = Canvas.AddEllipse(x,y,h,w,LineWidth = lw,FillColor = colors[cf])
1018 self.ColorObjectsAll.append(self.Ellipse)
2e839e96 1019
5e1796ef
RD
1020 # Point
1021 xy = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
1022 D = random.randint(1,50)
1023 lw = random.randint(1,5)
1024 cf = random.randint(0,len(colors)-1)
1025 cl = random.randint(0,len(colors)-1)
1026 self.ColorObjectsColor.append(Canvas.AddPoint(xy, colors[cf], D))
2e839e96 1027
5e1796ef
RD
1028 # Circle
1029 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
1030 D = random.randint(1,5)
1031 lw = random.randint(1,5)
1032 cf = random.randint(0,len(colors)-1)
1033 cl = random.randint(0,len(colors)-1)
1034 self.Circle = Canvas.AddCircle(x,y,D,LineWidth = lw,LineColor = colors[cl],FillColor = colors[cf])
1035 self.ColorObjectsAll.append(self.Circle)
1036
1037 # Line
1038 points = []
1039 for j in range(random.randint(2,10)):
1040 point = (random.randint(Range[0],Range[1]),random.randint(Range[0],Range[1]))
1041 points.append(point)
1042 lw = random.randint(1,10)
1043 cf = random.randint(0,len(colors)-1)
1044 cl = random.randint(0,len(colors)-1)
1045 self.ColorObjectsLine.append(Canvas.AddLine(points, LineWidth = lw, LineColor = colors[cl]))
2e839e96 1046
5e1796ef
RD
1047 # Polygon
1048## points = []
1049## for j in range(random.randint(2,6)):
1050## point = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
1051## points.append(point)
1052 points = RandomArray.uniform(Range[0],Range[1],(6,2))
1053 lw = random.randint(1,6)
1054 cf = random.randint(0,len(colors)-1)
1055 cl = random.randint(0,len(colors)-1)
1056 self.ColorObjectsAll.append(Canvas.AddPolygon(points,
1057 LineWidth = lw,
1058 LineColor = colors[cl],
1059 FillColor = colors[cf],
1060 FillStyle = 'Solid'))
2e839e96 1061
5e1796ef
RD
1062 ## Pointset
1063 points = RandomArray.uniform(Range[0],Range[1],(100,2))
1064 cf = random.randint(0,len(colors)-1)
1065 D = random.randint(1,4)
1066 self.PointSet = Canvas.AddPointSet(points, Color = colors[cf], Diameter = D)
1067 self.ColorObjectsColor.append(self.PointSet)
2e839e96 1068
5e1796ef
RD
1069 ## Point
1070 point = RandomArray.uniform(Range[0],Range[1],(2,))
1071 cf = random.randint(0,len(colors)-1)
1072 D = random.randint(1,4)
1073 self.Point = Canvas.AddPoint(point, Color = colors[cf], Diameter = D)
1074 self.ColorObjectsColor.append(self.Point)
2e839e96 1075
5e1796ef
RD
1076 # Text
1077 String = "Unscaled text"
1078 ts = random.randint(10,40)
1079 cf = random.randint(0,len(colors)-1)
1080 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
1081 self.ColorObjectsText.append(Canvas.AddText(String, x, y, Size = ts, Color = colors[cf], Position = "cc"))
1082
1083 # Scaled Text
1084 String = "Scaled text"
1085 ts = random.random()*3 + 0.2
1086 cf = random.randint(0,len(colors)-1)
1087 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
1088 self.ColorObjectsText.append(Canvas.AddScaledText(String, x, y, Size = ts, Color = colors[cf], Position = "cc"))
42463de2 1089
5e1796ef
RD
1090 # A "Button"
1091 Button = Canvas.AddRectangle(-10, -12, 20, 3, LineStyle = None, FillColor = "Red")
1092 Canvas.AddScaledText("Click Here To Change Properties",
1093 0, -10.5,
1094 Size = 0.7,
1095 Color = "Black",
1096 Position = "cc")
1097
1098 Button.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.ChangeProperties)
42463de2
RD
1099
1100 Canvas.ZoomToBB()
1101
5e1796ef
RD
1102 def ChangeProperties(self, Object = None):
1103 colors = self.colors
1104 Range = (-10,10)
1105
1106 for Object in self.ColorObjectsAll:
1107 pass
1108 Object.SetFillColor(colors[random.randint(0,len(colors)-1)])
1109 Object.SetLineColor(colors[random.randint(0,len(colors)-1)])
1110 Object.SetLineWidth(random.randint(1,7))
1111 Object.SetLineStyle(FloatCanvas.DrawObject.LineStyleList.keys()[random.randint(0,5)])
1112 for Object in self.ColorObjectsLine:
1113 Object.SetLineColor(colors[random.randint(0,len(colors)-1)])
1114 Object.SetLineWidth(random.randint(1,7))
1115 Object.SetLineStyle(FloatCanvas.DrawObject.LineStyleList.keys()[random.randint(0,5)])
1116 for Object in self.ColorObjectsColor:
1117 Object.SetColor(colors[random.randint(0,len(colors)-1)])
1118 for Object in self.ColorObjectsText:
1119 Object.SetColor(colors[random.randint(0,len(colors)-1)])
1120 Object.SetBackgroundColor(colors[random.randint(0,len(colors)-1)])
1121 self.Circle.SetDiameter(random.randint(1,10))
1122 self.PointSet.SetDiameter(random.randint(1,8))
1123 self.Point.SetDiameter(random.randint(1,8))
1124 for Object in (self.Rectangle, self.Ellipse):
1125 x,y = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
1126 w,h = random.randint(1,5), random.randint(1,5)
1127 Object.SetShape(x,y,w,h)
2a0495c9
RD
1128 self.Canvas.Draw(Force = True)
1129
1130 def ArrowTest(self,event=None):
1131 wx.GetApp().Yield()
1132 self.UnBindAllMouseEvents()
1133 Canvas = self.Canvas
1134
1135 Canvas.ClearAll()
1136 Canvas.SetProjectionFun(None)
1137
1138 # put in a rectangle to get a bounding box
1139 Canvas.AddRectangle(0,0,20,20,LineColor = None)
1140
1141 # Draw some Arrows
1142 Canvas.AddArrow((10,10),Length = 40, Direction = 0)
1143 Canvas.AddArrow((10,10),Length = 50, Direction = 45 ,LineWidth = 2, LineColor = "Black", ArrowHeadAngle = 20)
1144 Canvas.AddArrow((10,10),Length = 60, Direction = 90 ,LineWidth = 3, LineColor = "Red", ArrowHeadAngle = 30)
1145 Canvas.AddArrow((10,10),Length = 70, Direction = 135,LineWidth = 4, LineColor = "Red", ArrowHeadAngle = 40)
1146 Canvas.AddArrow((10,10),Length = 80, Direction = 180,LineWidth = 5, LineColor = "Blue", ArrowHeadAngle = 50)
1147 Canvas.AddArrow((10,10),Length = 90, Direction = 225,LineWidth = 4, LineColor = "Blue", ArrowHeadAngle = 60)
1148 Canvas.AddArrow((10,10),Length = 100,Direction = 270,LineWidth = 3, LineColor = "Green", ArrowHeadAngle = 70)
1149 Canvas.AddArrow((10,10),Length = 110,Direction = 315,LineWidth = 2, LineColor = "Green", ArrowHeadAngle = 90 )
1150
1151 Canvas.AddText("Clickable Arrow",4,18,Position = "bc")
1152 Arrow = Canvas.AddArrow((4,18), 80, Direction = 90 ,LineWidth = 3, LineColor = "Red", ArrowHeadAngle = 30)
1153 Arrow.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.ArrowClicked)
1154
1155 Canvas.AddText("Changable Arrow",16,4,Position = "cc")
1156 self.RotArrow = Canvas.AddArrow((16,4), 80, Direction = 0 ,LineWidth = 3, LineColor = "Green", ArrowHeadAngle = 30)
1157 self.RotArrow.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.RotateArrow)
1158
1159
1160
1161 Canvas.ZoomToBB()
1162
1163 def ArrowClicked(self,event):
1164 print "The Arrow was Clicked"
1165
1166 def RotateArrow(self,event):
1167 print "The Changeable Arrow was Clicked"
1168 ## You can do them either one at a time, or both at once
1169 ## Doing them both at once prevents the arrow points from being calculated twice
1170 #self.RotArrow.SetDirection(self.RotArrow.Direction + random.uniform(-90,90))
1171 #self.RotArrow.SetLength(self.RotArrow.Length + random.randint(-20,20))
1172 self.RotArrow.SetLengthDirection(self.RotArrow.Length + random.randint(-20,20),
1173 self.RotArrow.Direction + random.uniform(-90,90) )
2e839e96 1174
5e1796ef 1175 self.Canvas.Draw(Force = True)
42463de2
RD
1176
1177 def TempTest(self, event= None):
5e1796ef 1178 wx.GetApp().Yield()
42463de2
RD
1179
1180 self.UnBindAllMouseEvents()
1181 Canvas = self.Canvas
1182 Canvas.ClearAll()
1183 Canvas.SetProjectionFun(None)
1184
42463de2
RD
1185 Range = (-10,10)
1186
1187 # Create a random Polygon
1188 points = []
1189 for j in range(6):
1190 point = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1]))
1191 points.append(point)
1192 Poly = Canvas.AddPolygon(points,
1193 LineWidth = 2,
1194 LineColor = "Black",
1195 FillColor = "LightBlue",
1196 FillStyle = 'Solid')
1197
1198 Poly.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.SelectPoly)
1199
1200 self.SelectedPoly = None
1201 self.SelectPoints = []
1202 self.SelectedPoint = None
2e839e96 1203
42463de2
RD
1204 Canvas.ZoomToBB()
1205
1206 def SelectPoly(self, Object):
1207 print "In SelectPoly"
1208 Canvas = self.Canvas
1209 if Object is self.SelectedPoly:
1210 pass
1211 else:
1212 #fixme: Do something to unselect the old one
1213 self.SelectedPoly = Object
1214 Canvas.RemoveObjects(self.SelectPoints)
1215 self.SelectPoints = []
1216 # Draw points on the Vertices of the Selected Poly:
1217 for i, point in enumerate(Object.Points):
1218 P = Canvas.AddPointSet(point, Diameter = 6, Color = "Red")
1219 P.VerticeNum = i
1220 P.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.SelectPointHit)
1221 self.SelectPoints.append(P)
1222 #Canvas.ZoomToBB()
1223 Canvas.Draw()
1224
1225 def SelectPointHit(self, Point):
1226 print "Point Num: %i Hit"%Point.VerticeNum
1227 self.SelectedPoint = Point
1228
2a0495c9
RD
1229 def Read_MapGen(self, filename, stats = 0,AllLines=0):
1230 """
1231 This function reads a MapGen Format file, and
1232 returns a list of NumPy arrays with the line segments in them.
1233
1234 Each NumPy array in the list is an NX2 array of Python Floats.
1235
1236 The demo should have come with a file, "world.dat" that is the
1237 shorelines of the whole world, in MapGen format.
2e839e96 1238
2a0495c9
RD
1239 """
1240 import string
1241 file = open(filename,'rt')
1242 data = file.readlines()
1243 data = map(string.strip,data)
1244
1245 Shorelines = []
1246 segment = []
1247 for line in data:
1248 if line:
1249 if line == "# -b": #New segment beginning
1250 if segment: Shorelines.append(Numeric.array(segment))
1251 segment = []
1252 else:
1253 segment.append(map(float,string.split(line)))
1254 if segment: Shorelines.append(Numeric.array(segment))
1255
1256 if stats:
1257 NumSegments = len(Shorelines)
1258 NumPoints = 0
1259 for segment in Shorelines:
1260 NumPoints = NumPoints + len(segment)
1261 AvgPoints = NumPoints / NumSegments
1262 print "Number of Segments: ", NumSegments
1263 print "Average Number of Points per segment: ",AvgPoints
1264 if AllLines:
1265 Lines = []
1266 for segment in Shorelines:
1267 Lines.append(segment[0])
1268 for point in segment[1:-1]:
1269 Lines.append(point)
1270 Lines.append(point)
1271 Lines.append(segment[-1])
1272 return Lines
1273 else:
1274 return Shorelines
1275 return DrawFrame
1276
1277#---------------------------------------------------------------------------
1278
1279if __name__ == "__main__":
1280 # check options:
1281 import sys, getopt
1282 optlist, args = getopt.getopt(sys.argv[1:],'l',["local","all","text","map","stext","hit","hitf","animate","speed","temp","props","arrow"])
1283
1284 if not haveNumeric:
1285 raise ImportError(errorText)
1286 StartUpDemo = "all" # the default
1287 for opt in optlist:
1288 if opt[0] == "--all":
1289 StartUpDemo = "all"
1290 elif opt[0] == "--text":
1291 StartUpDemo = "text"
1292 elif opt[0] == "--map":
1293 StartUpDemo = "map"
1294 elif opt[0] == "--stext":
1295 StartUpDemo = "stext"
1296 elif opt[0] == "--hit":
1297 StartUpDemo = "hit"
1298 elif opt[0] == "--hitf":
1299 StartUpDemo = "hitf"
1300 elif opt[0] == "--animate":
1301 StartUpDemo = "animate"
1302 elif opt[0] == "--speed":
1303 StartUpDemo = "speed"
1304 elif opt[0] == "--temp":
1305 StartUpDemo = "temp"
1306 elif opt[0] == "--props":
1307 StartUpDemo = "props"
1308 elif opt[0] == "--arrow":
1309 StartUpDemo = "arrow"
1310 try:
1311 import fixdc
1312 except ImportError:
1313 print ("\n *************Notice*************\n"
1314 "The fixdc module fixes the DC API for wxPython2.5.1.6 You can get the module from:\n"
1315 "http://prdownloads.sourceforge.net/wxpython/fixdc.py?download\n"
1316 " It will set up the DC methods to match both older and upcoming versions\n")
1317 raise
2e839e96 1318
8fa876ca 1319 class DemoApp(wx.App):
8b9a4190
RD
1320 """
1321 How the demo works:
2e839e96 1322
8b9a4190 1323 Under the Draw menu, there are three options:
2e839e96 1324
8b9a4190
RD
1325 *Draw Test: will put up a picture of a bunch of randomly generated
1326 objects, of each kind supported.
2e839e96 1327
8b9a4190
RD
1328 *Draw Map: will draw a map of the world. Be patient, it is a big map,
1329 with a lot of data, and will take a while to load and draw (about 10 sec
1330 on my 450Mhz PIII). Redraws take about 2 sec. This demonstrates how the
1331 performance is not very good for large drawings.
2e839e96 1332
8b9a4190 1333 *Clear: Clears the Canvas.
2e839e96 1334
8b9a4190
RD
1335 Once you have a picture drawn, you can zoom in and out and move about
1336 the picture. There is a tool bar with three tools that can be
1337 selected.
2e839e96 1338
8b9a4190
RD
1339 The magnifying glass with the plus is the zoom in tool. Once selected,
1340 if you click the image, it will zoom in, centered on where you
1341 clicked. If you click and drag the mouse, you will get a rubber band
1342 box, and the image will zoom to fit that box when you release it.
2e839e96 1343
8b9a4190
RD
1344 The magnifying glass with the minus is the zoom out tool. Once selected,
1345 if you click the image, it will zoom out, centered on where you
1346 clicked. (note that this takes a while when you are looking at the map,
1347 as it has a LOT of lines to be drawn. The image is double buffered, so
1348 you don't see the drawing in progress)
2e839e96 1349
8b9a4190
RD
1350 The hand is the move tool. Once selected, if you click and drag on the
1351 image, it will move so that the part you clicked on ends up where you
1352 release the mouse. Nothing is changed while you are dragging. The
1353 drawing is too slow for that.
2e839e96 1354
8b9a4190
RD
1355 I'd like the cursor to change as you change tools, but the stock
1356 wxCursors didn't include anything I liked, so I stuck with the
1357 pointer. Please let me know if you have any nice cursor images for me to
1358 use.
2e839e96
RD
1359
1360
8b9a4190 1361 Any bugs, comments, feedback, questions, and especially code are welcome:
2e839e96 1362
8b9a4190 1363 -Chris Barker
2e839e96 1364
8b9a4190 1365 Chris.Barker@noaa.gov
2e839e96 1366
8b9a4190 1367 """
42463de2
RD
1368
1369 def __init__(self, *args, **kwargs):
1370 wx.App.__init__(self, *args, **kwargs)
2e839e96 1371
8b9a4190 1372 def OnInit(self):
42463de2 1373 wx.InitAllImageHandlers()
2a0495c9 1374 DrawFrame = BuildDrawFrame()
42463de2 1375 frame = DrawFrame(None, -1, "FloatCanvas Demo App",wx.DefaultPosition,(700,700))
2e839e96 1376
8b9a4190 1377 self.SetTopWindow(frame)
42463de2
RD
1378 frame.Show()
1379
1380 ## check to see if the demo is set to start in a particular mode.
1381 if StartUpDemo == "text":
1382 frame.TestText()
1383 if StartUpDemo == "stext":
1384 frame.TestScaledText()
1385 elif StartUpDemo == "all":
1386 frame.DrawTest()
1387 elif StartUpDemo == "map":
1388 frame.DrawMap()
1389 elif StartUpDemo == "hit":
1390 frame.TestHitTest()
1391 elif StartUpDemo == "hitf":
1392 "starting TestHitTestForeground"
1393 frame.TestHitTestForeground()
1394 elif StartUpDemo == "animate":
1395 "starting TestAnimation"
1396 frame.TestAnimation()
1397 elif StartUpDemo == "speed":
1398 "starting SpeedTest"
1399 frame.SpeedTest()
1400 elif StartUpDemo == "temp":
1401 "starting temp Test"
1402 frame.TempTest()
5e1796ef
RD
1403 elif StartUpDemo == "props":
1404 "starting PropertiesChange Test"
1405 frame.PropertiesChangeTest()
2a0495c9
RD
1406 elif StartUpDemo == "arrow":
1407 "starting arrow Test"
1408 frame.ArrowTest()
2e839e96 1409
8b9a4190 1410 return True
2e839e96 1411
2a0495c9
RD
1412 app = DemoApp(False)# put in True if you want output to go to it's own window.
1413 app.MainLoop()
2e839e96
RD
1414
1415else:
2a0495c9 1416 # It's not running stand-alone, set up for wxPython demo.
8b9a4190 1417 if not haveNumeric:
2a0495c9
RD
1418 ## TestPanel and runTest used for integration into wxPython Demo
1419 class TestPanel(wx.Panel):
1420 def __init__(self, parent, log):
1421 self.log = log
1422 wx.Panel.__init__(self, parent, -1)
1423
1424 import images
1425
1426 note1 = wx.StaticText(self, -1, errorText)
1427 note2 = wx.StaticText(self, -1, "This is what the FloatCanvas can look like:")
1428 S = wx.BoxSizer(wx.VERTICAL)
1429 S.Add((10, 10), 1)
1430 S.Add(note1, 0, wx.ALIGN_CENTER)
1431 S.Add(note2, 0, wx.ALIGN_CENTER | wx.BOTTOM, 4)
1432 S.Add(wx.StaticBitmap(self,-1,images.getFloatCanvasBitmap()),0,wx.ALIGN_CENTER)
1433 S.Add((10, 10), 1)
1434 self.SetSizer(S)
1435 self.Layout()
42463de2 1436
2a0495c9
RD
1437 else:
1438 ## TestPanel and runTest used for integration into wxPython Demo
1439 class TestPanel(wx.Panel):
1440 def __init__(self, parent, log):
1441 self.log = log
1442 wx.Panel.__init__(self, parent, -1)
1443 note1 = wx.StaticText(self, -1, "The FloatCanvas Demo needs")
1444 note2 = wx.StaticText(self, -1, "a separate frame")
1445 b = wx.Button(self, -1, "Open Demo Frame Now")
1446 b.Bind(wx.EVT_BUTTON, self.OnButton)
1447
1448 S = wx.BoxSizer(wx.VERTICAL)
1449 S.Add((10, 10), 1)
1450 S.Add(note1, 0, wx.ALIGN_CENTER)
1451 S.Add(note2, 0, wx.ALIGN_CENTER | wx.BOTTOM, 5)
1452 S.Add(b, 0, wx.ALIGN_CENTER | wx.ALL, 5)
1453 S.Add((10, 10), 1)
1454 self.SetSizer(S)
1455 self.Layout()
1456
1457 def OnButton(self, evt):
1458 DrawFrame = BuildDrawFrame()
1459 frame = DrawFrame(None, -1, "FloatCanvas Drawing Window",wx.DefaultPosition,(500,500))
1460
1461 #win = wx.lib.plot.TestFrame(self, -1, "PlotCanvas Demo")
1462 frame.Show()
1463 frame.DrawTest()
42463de2 1464
2a0495c9
RD
1465 def runTest(frame, nb, log):
1466 win = TestPanel(nb, log)
1467 return win
42463de2 1468
2a0495c9
RD
1469 # import to get the doc
1470 from wx.lib import floatcanvas
1471 overview = floatcanvas.__doc__
42463de2
RD
1472
1473
1474
1475
1476
1477
1478
1479