]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/FloatCanvas.py
   5     import numpy
.random 
as RandomArray
 
   7     #print "Using numpy, version:", N.__version__ 
  12             "The FloatCanvas requires the numpy module, version 1.* \n\n" 
  13             "You can get info about it at:\n" 
  14             "http://numpy.scipy.org/\n\n" 
  17 #--------------------------------------------------------------------------- 
  20 def BuildDrawFrame(): # this gets called when needed, rather than on import 
  22         from floatcanvas 
import NavCanvas
, FloatCanvas
, Resources
 
  23     except ImportError: # if it's not there locally, try the wxPython lib. 
  24         from wx
.lib
.floatcanvas 
import NavCanvas
, FloatCanvas
, Resources
 
  25     import wx
.lib
.colourdb
 
  28     class DrawFrame(wx
.Frame
): 
  31         A frame used for the FloatCanvas Demo 
  36         def __init__(self
,parent
, id,title
,position
,size
): 
  37             wx
.Frame
.__init
__(self
,parent
, id,title
,position
, size
) 
  40             MenuBar 
= wx
.MenuBar() 
  43             item 
= file_menu
.Append(-1, "&Close","Close this frame") 
  44             self
.Bind(wx
.EVT_MENU
, self
.OnQuit
, item
) 
  46             item 
= file_menu
.Append(-1, "&SavePNG","Save the current image as a PNG") 
  47             self
.Bind(wx
.EVT_MENU
, self
.OnSavePNG
, item
) 
  48             MenuBar
.Append(file_menu
, "&File") 
  52             item 
= draw_menu
.Append(-1, "&Clear","Clear the Canvas") 
  53             self
.Bind(wx
.EVT_MENU
, self
.Clear
, item
) 
  55             item 
= draw_menu
.Append(-1, "&Draw Test","Run a test of drawing random components") 
  56             self
.Bind(wx
.EVT_MENU
, self
.DrawTest
, item
) 
  58             item 
= draw_menu
.Append(-1, "&Line Test","Run a test of drawing random lines") 
  59             self
.Bind(wx
.EVT_MENU
, self
.LineTest
, item
) 
  61             item 
= draw_menu
.Append(-1, "Draw &Map","Run a test of drawing a map") 
  62             self
.Bind(wx
.EVT_MENU
, self
.DrawMap
, item
) 
  64             item 
= draw_menu
.Append(-1, "&Text Test","Run a test of text drawing") 
  65             self
.Bind(wx
.EVT_MENU
, self
.TestText
, item
) 
  67             item 
= draw_menu
.Append(-1, "&ScaledText Test","Run a test of text drawing") 
  68             self
.Bind(wx
.EVT_MENU
, self
.TestScaledText
, item
) 
  70             item 
= draw_menu
.Append(-1, "&ScaledTextBox Test","Run a test of the Scaled Text Box") 
  71             self
.Bind(wx
.EVT_MENU
, self
.TestScaledTextBox
, item
) 
  73             item 
= draw_menu
.Append(-1, "&Bitmap Test","Run a test of the Bitmap Object") 
  74             self
.Bind(wx
.EVT_MENU
, self
.TestBitmap
, item
) 
  76             item 
= draw_menu
.Append(-1, "&Hit Test","Run a test of the hit test code") 
  77             self
.Bind(wx
.EVT_MENU
, self
.TestHitTest
, item
) 
  79             item 
= draw_menu
.Append(-1, "Hit Test &Foreground","Run a test of the hit test code with a foreground Object") 
  80             self
.Bind(wx
.EVT_MENU
, self
.TestHitTestForeground
, item
) 
  82             item 
= draw_menu
.Append(-1, "&Animation","Run a test of Animation") 
  83             self
.Bind(wx
.EVT_MENU
, self
.TestAnimation
, item
) 
  85             #item = draw_menu.Append(-1, "&Speed","Run a test of Drawing Speed") 
  86             #self.Bind(wx.EVT_MENU, self.SpeedTest, item) 
  88             item 
= draw_menu
.Append(-1, "Change &Properties","Run a test of Changing Object Properties") 
  89             self
.Bind(wx
.EVT_MENU
, self
.PropertiesChangeTest
, item
) 
  91             item 
= draw_menu
.Append(-1, "&Arrows","Run a test of Arrows") 
  92             self
.Bind(wx
.EVT_MENU
, self
.ArrowTest
, item
) 
  94             item 
= draw_menu
.Append(-1, "&ArrowLine Test","Run a test of drawing Arrow Lines") 
  95             self
.Bind(wx
.EVT_MENU
, self
.ArrowLineTest
, item
) 
  97             item 
= draw_menu
.Append(-1, "&Hide","Run a test of hiding and showing objects") 
  98             self
.Bind(wx
.EVT_MENU
, self
.HideTest
, item
) 
 100             MenuBar
.Append(draw_menu
, "&Tests") 
 102             view_menu 
= wx
.Menu() 
 103             item 
= view_menu
.Append(-1, "Zoom to &Fit","Zoom to fit the window") 
 104             self
.Bind(wx
.EVT_MENU
, self
.ZoomToFit
, item
) 
 105             MenuBar
.Append(view_menu
, "&View") 
 107             help_menu 
= wx
.Menu() 
 108             item 
= help_menu
.Append(-1, "&About", 
 109                                     "More information About this program") 
 110             self
.Bind(wx
.EVT_MENU
, self
.OnAbout
, item
) 
 111             MenuBar
.Append(help_menu
, "&Help") 
 113             self
.SetMenuBar(MenuBar
) 
 115             self
.CreateStatusBar() 
 119             NC 
= NavCanvas
.NavCanvas(self
, 
 121                                      BackgroundColor 
= "DARK SLATE BLUE") 
 123             self
.Canvas 
= NC
.Canvas 
# reference the contained FloatCanvas 
 125             self
.MsgWindow 
= wx
.TextCtrl(self
, wx
.ID_ANY
, 
 126                                          "Look Here for output from events\n", 
 127                                          style 
= (wx
.TE_MULTILINE |
 
 132             ##Create a sizer to manage the Canvas and message window 
 133             MainSizer 
= wx
.BoxSizer(wx
.VERTICAL
) 
 134             MainSizer
.Add(NC
, 4, wx
.EXPAND
) 
 135             MainSizer
.Add(self
.MsgWindow
, 1, wx
.EXPAND | wx
.ALL
, 5) 
 137             self
.SetSizer(MainSizer
) 
 138             self
.Bind(wx
.EVT_CLOSE
, self
.OnCloseWindow
) 
 140             self
.Canvas
.Bind(FloatCanvas
.EVT_MOTION
, self
.OnMove
)  
 141             self
.Canvas
.Bind(FloatCanvas
.EVT_MOUSEWHEEL
, self
.OnWheel
)  
 143             self
.EventsAreBound 
= False 
 145             ## getting all the colors for random objects 
 146             wx
.lib
.colourdb
.updateColourDB() 
 147             self
.colors 
= wx
.lib
.colourdb
.getColourList() 
 153             self
.MsgWindow
.AppendText(text
) 
 154             if not text
[-1] == "\n": 
 155                 self
.MsgWindow
.AppendText("\n") 
 158         def BindAllMouseEvents(self
): 
 159             if not self
.EventsAreBound
: 
 160                 ## Here is how you catch FloatCanvas mouse events 
 161                 self
.Canvas
.Bind(FloatCanvas
.EVT_LEFT_DOWN
, self
.OnLeftDown
)  
 162                 self
.Canvas
.Bind(FloatCanvas
.EVT_LEFT_UP
, self
.OnLeftUp
) 
 163                 self
.Canvas
.Bind(FloatCanvas
.EVT_LEFT_DCLICK
, self
.OnLeftDouble
)  
 165                 self
.Canvas
.Bind(FloatCanvas
.EVT_MIDDLE_DOWN
, self
.OnMiddleDown
)  
 166                 self
.Canvas
.Bind(FloatCanvas
.EVT_MIDDLE_UP
, self
.OnMiddleUp
)  
 167                 self
.Canvas
.Bind(FloatCanvas
.EVT_MIDDLE_DCLICK
, self
.OnMiddleDouble
)  
 169                 self
.Canvas
.Bind(FloatCanvas
.EVT_RIGHT_DOWN
, self
.OnRightDown
)  
 170                 self
.Canvas
.Bind(FloatCanvas
.EVT_RIGHT_UP
, self
.OnRightUp
)  
 171                 self
.Canvas
.Bind(FloatCanvas
.EVT_RIGHT_DCLICK
, self
.OnRightDouble
)  
 173             self
.EventsAreBound 
= True 
 176         def UnBindAllMouseEvents(self
): 
 177             ## Here is how you unbind FloatCanvas mouse events 
 178             self
.Canvas
.Unbind(FloatCanvas
.EVT_LEFT_DOWN
) 
 179             self
.Canvas
.Unbind(FloatCanvas
.EVT_LEFT_UP
) 
 180             self
.Canvas
.Unbind(FloatCanvas
.EVT_LEFT_DCLICK
) 
 182             self
.Canvas
.Unbind(FloatCanvas
.EVT_MIDDLE_DOWN
) 
 183             self
.Canvas
.Unbind(FloatCanvas
.EVT_MIDDLE_UP
) 
 184             self
.Canvas
.Unbind(FloatCanvas
.EVT_MIDDLE_DCLICK
) 
 186             self
.Canvas
.Unbind(FloatCanvas
.EVT_RIGHT_DOWN
) 
 187             self
.Canvas
.Unbind(FloatCanvas
.EVT_RIGHT_UP
) 
 188             self
.Canvas
.Unbind(FloatCanvas
.EVT_RIGHT_DCLICK
) 
 190             self
.EventsAreBound 
= False 
 193         def PrintCoords(self
,event
): 
 194             self
.Log("coords are: %s"%(event
.Coords
,)) 
 195             self
.Log("pixel coords are: %s\n"%(event
.GetPosition(),)) 
 197         def OnSavePNG(self
, event
=None): 
 200                 self
, message
="Save file as ...", defaultDir
=os
.getcwd(),  
 201                 defaultFile
="", wildcard
="*.png", style
=wx
.SAVE
 
 203             if dlg
.ShowModal() == wx
.ID_OK
: 
 205                 if not(path
[-4:].lower() == ".png"): 
 207                 self
.Canvas
.SaveAsImage(path
) 
 210         def OnLeftDown(self
, event
): 
 212             self
.PrintCoords(event
) 
 214         def OnLeftUp(self
, event
): 
 216             self
.PrintCoords(event
) 
 218         def OnLeftDouble(self
, event
): 
 219             self
.Log("LeftDouble") 
 220             self
.PrintCoords(event
) 
 222         def OnMiddleDown(self
, event
): 
 223             self
.Log("MiddleDown") 
 224             self
.PrintCoords(event
) 
 226         def OnMiddleUp(self
, event
): 
 228             self
.PrintCoords(event
) 
 230         def OnMiddleDouble(self
, event
): 
 231             self
.Log("MiddleDouble") 
 232             self
.PrintCoords(event
) 
 234         def OnRightDown(self
, event
): 
 235             self
.Log("RightDown") 
 236             self
.PrintCoords(event
) 
 238         def OnRightUp(self
, event
): 
 240             self
.PrintCoords(event
) 
 242         def OnRightDouble(self
, event
): 
 243             self
.Log("RightDouble") 
 244             self
.PrintCoords(event
) 
 246         def OnWheel(self
, event
): 
 247             self
.Log("Mouse Wheel") 
 248             self
.PrintCoords(event
) 
 249             Rot 
= event
.GetWheelRotation() 
 250             Rot 
= Rot 
/ abs(Rot
) * 0.1 
 251             if event
.ControlDown(): # move left-right 
 252                 self
.Canvas
.MoveImage( (Rot
, 0), "Panel" ) 
 254                 self
.Canvas
.MoveImage( (0, Rot
), "Panel" ) 
 256         def OnMove(self
, event
): 
 258             Updates the status bar with the world coordinates 
 260             self
.SetStatusText("%.2f, %.2f"%tuple(event
.Coords
)) 
 263         def OnAbout(self
, event
): 
 264             dlg 
= wx
.MessageDialog(self
, 
 265                                    "This is a small program to demonstrate\n" 
 266                                    "the use of the FloatCanvas\n", 
 268                                    wx
.OK | wx
.ICON_INFORMATION
) 
 272         def ZoomToFit(self
,event
): 
 273             self
.Canvas
.ZoomToBB() 
 275         def Clear(self
,event 
= None): 
 276             self
.UnBindAllMouseEvents() 
 277             self
.Canvas
.InitAll() 
 280         def OnQuit(self
,event
): 
 283         def OnCloseWindow(self
, event
): 
 286         def DrawTest(self
,event
=None): 
 288             This demo draws a few of everything 
 292             wx
.GetApp().Yield(True) 
 297             self
.BindAllMouseEvents() 
 302             ## these set the limits for how much you can zoom in and out 
 304             Canvas
.MaxScale 
= 500 
 307             ############# Random tests of everything ############## 
 311                 xy 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
 312                 lw 
= random
.randint(1,5) 
 313                 cf 
= random
.randint(0,len(colors
)-1) 
 314                 wh 
= (random
.randint(1,5), random
.randint(1,5)) 
 315                 Canvas
.AddRectangle(xy
, wh
, LineWidth 
= lw
, FillColor 
= colors
[cf
]) 
 319                 xy 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
 320                 lw 
= random
.randint(1,5) 
 321                 cf 
= random
.randint(0,len(colors
)-1) 
 322                 h 
= random
.randint(1,5) 
 323                 w 
= random
.randint(1,5) 
 324                 Canvas
.AddEllipse(xy
, (h
,w
), LineWidth 
= lw
,FillColor 
= colors
[cf
]) 
 328                 xy 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
 329                 D 
= random
.randint(1,50) 
 330                 cf 
= random
.randint(0,len(colors
)-1) 
 331                 Canvas
.AddPoint(xy
, Color 
= colors
[cf
], Diameter 
= D
) 
 335                 xy 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
 336                 S 
= random
.randint(1, 50) 
 337                 cf 
= random
.randint(0,len(colors
)-1) 
 338                 Canvas
.AddSquarePoint(xy
, Color 
= colors
[cf
], Size 
= S
) 
 342                 xy 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
 343                 D 
= random
.randint(1,5) 
 344                 lw 
= random
.randint(1,5) 
 345                 cf 
= random
.randint(0,len(colors
)-1) 
 346                 cl 
= random
.randint(0,len(colors
)-1) 
 347                 Canvas
.AddCircle(xy
, D
, LineWidth 
= lw
, LineColor 
= colors
[cl
], FillColor 
= colors
[cf
]) 
 348                 Canvas
.AddText("Circle # %i"%(i), xy
, Size 
= 12, BackgroundColor 
= None, Position 
= "cc") 
 352                 for j 
in range(random
.randint(2,10)): 
 353                     point 
= (random
.randint(Range
[0],Range
[1]),random
.randint(Range
[0],Range
[1])) 
 355                 lw 
= random
.randint(1,10) 
 356                 cf 
= random
.randint(0,len(colors
)-1) 
 357                 cl 
= random
.randint(0,len(colors
)-1) 
 358                 Canvas
.AddLine(points
, LineWidth 
= lw
, LineColor 
= colors
[cl
]) 
 362                 for j 
in range(random
.randint(2,6)): 
 363                     point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
 365                 lw 
= random
.randint(1,6) 
 366                 cf 
= random
.randint(0,len(colors
)-1) 
 367                 cl 
= random
.randint(0,len(colors
)-1) 
 368                 Canvas
.AddPolygon(points
, 
 370                                        LineColor 
= colors
[cl
], 
 371                                        FillColor 
= colors
[cf
], 
 377                 points 
= RandomArray
.uniform(Range
[0],Range
[1],(100,2)) 
 378                 cf 
= random
.randint(0,len(colors
)-1) 
 379                 D 
= random
.randint(1,4) 
 380                 Canvas
.AddPointSet(points
, Color 
= colors
[cf
], Diameter 
= D
) 
 383             String 
= "Unscaled text" 
 385                 ts 
= random
.randint(10,40) 
 386                 cf 
= random
.randint(0,len(colors
)-1) 
 387                 xy 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
 388                 Canvas
.AddText(String
, xy
, Size 
= ts
, Color 
= colors
[cf
], Position 
= "cc") 
 391             String 
= "Scaled text" 
 393                 ts 
= random
.random()*3 + 0.2 
 394                 cf 
= random
.randint(0,len(colors
)-1) 
 395                 Point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
 396                 Canvas
.AddScaledText(String
, Point
, Size 
= ts
, Color 
= colors
[cf
], Position 
= "cc") 
 400             Points 
= RandomArray
.uniform(Range
[0], Range
[1], (N
,2) ) 
 402                 Canvas
.AddArrow(Points
[i
], 
 403                                 random
.uniform(20,100), 
 404                                 Direction 
= random
.uniform(0,360), 
 405                                 LineWidth 
= random
.uniform(1,5), 
 406                                 LineColor 
= colors
[random
.randint(0,len(colors
)-1)], 
 407                                 ArrowHeadAngle 
= random
.uniform(20,90)) 
 412                 for j 
in range(random
.randint(2,10)): 
 413                     point 
= (random
.randint(Range
[0],Range
[1]),random
.randint(Range
[0],Range
[1])) 
 415                 lw 
= random
.randint(1,10) 
 416                 cf 
= random
.randint(0,len(colors
)-1) 
 417                 cl 
= random
.randint(0,len(colors
)-1) 
 418                 Canvas
.AddArrowLine(points
, LineWidth 
= lw
, LineColor 
= colors
[cl
], ArrowHeadSize
= 16) 
 423         def TestAnimation(self
,event
=None): 
 426             In this test, a relatively complex background is drawn, and 
 427             a simple object placed in the foreground is moved over 
 428             it. This demonstrates how to use the InForeground attribute 
 429             to make an object in the foregorund draw fast, without 
 430             having to re-draw the whole background. 
 433             wx
.GetApp().Yield(True) 
 437             self
.UnBindAllMouseEvents() 
 441             ##          Random tests of everything: 
 445                 xy 
= (random
.uniform(Range
[0],Range
[1]), random
.uniform(Range
[0],Range
[1])) 
 446                 lw 
= random
.randint(1,5) 
 447                 cf 
= random
.randint(0,len(colors
)-1) 
 448                 wh 
= (random
.randint(1,5), random
.randint(1,5) ) 
 449                 Canvas
.AddRectangle(xy
, wh
, LineWidth 
= lw
, FillColor 
= colors
[cf
]) 
 453                 xy 
= (random
.uniform(Range
[0],Range
[1]), random
.uniform(Range
[0],Range
[1])) 
 454                 lw 
= random
.randint(1,5) 
 455                 cf 
= random
.randint(0,len(colors
)-1) 
 456                 wh 
= (random
.randint(1,5), random
.randint(1,5) ) 
 457                 Canvas
.AddEllipse(xy
, wh
, LineWidth 
= lw
, FillColor 
= colors
[cf
]) 
 461                 xy 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
 462                 D 
= random
.randint(1,5) 
 463                 lw 
= random
.randint(1,5) 
 464                 cf 
= random
.randint(0,len(colors
)-1) 
 465                 cl 
= random
.randint(0,len(colors
)-1) 
 466                 Canvas
.AddCircle(xy
, D
, LineWidth 
= lw
, LineColor 
= colors
[cl
], FillColor 
= colors
[cf
]) 
 467                 Canvas
.AddText("Circle # %i"%(i), xy
, Size 
= 12, BackgroundColor 
= None, Position 
= "cc") 
 472                 for j 
in range(random
.randint(2,10)): 
 473                     point 
= (random
.randint(Range
[0],Range
[1]),random
.randint(Range
[0],Range
[1])) 
 475                 lw 
= random
.randint(1,10) 
 476                 cf 
= random
.randint(0,len(colors
)-1) 
 477                 cl 
= random
.randint(0,len(colors
)-1) 
 478                 Canvas
.AddLine(points
, LineWidth 
= lw
, LineColor 
= colors
[cl
]) 
 483                 for j 
in range(random
.randint(2,6)): 
 484                     point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
 486                 lw 
= random
.randint(1,6) 
 487                 cf 
= random
.randint(0,len(colors
)-1) 
 488                 cl 
= random
.randint(0,len(colors
)-1) 
 489                 Canvas
.AddPolygon(points
, 
 491                                        LineColor 
= colors
[cl
], 
 492                                        FillColor 
= colors
[cf
], 
 496             String 
= "Scaled text" 
 498                 ts 
= random
.random()*3 + 0.2 
 499                 cf 
= random
.randint(0,len(colors
)-1) 
 500                 xy 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
 501                 Canvas
.AddScaledText(String
, xy
, Size 
= ts
, Color 
= colors
[cf
], Position 
= "cc") 
 504             # Now the Foreground Object: 
 505             C 
= Canvas
.AddCircle((0,0), 7, LineWidth 
= 2,LineColor 
= "Black",FillColor 
= "Red", InForeground 
= True) 
 506             T 
= Canvas
.AddScaledText("Click to Move", (0,0), Size 
= 0.6, Position 
= 'cc', InForeground 
= True) 
 507             C
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.MoveMe
) 
 510             self
.Timer 
= wx
.PyTimer(self
.ShowFrame
) 
 511             self
.FrameDelay 
= 50 # milliseconds 
 516             Object 
= self
.MovingObject
 
 518             if  self
.TimeStep 
< self
.NumTimeSteps
: 
 520                 if x 
> Range
[1] or x 
< Range
[0]: 
 522                 if y 
> Range
[1] or y 
< Range
[0]: 
 524                 Object
.Move( (self
.dx
,self
.dy
) ) 
 525                 Object
.Text
.Move( (self
.dx
,self
.dy
)) 
 528                 wx
.GetApp().Yield(True) 
 533         def MoveMe(self
, Object
): 
 534             self
.MovingObject 
= Object
 
 536             self
.dx 
= random
.uniform(Range
[0]/4,Range
[1]/4) 
 537             self
.dy 
= random
.uniform(Range
[0]/4,Range
[1]/4) 
 540             self
.NumTimeSteps 
= 200 
 542             self
.Timer
.Start(self
.FrameDelay
) 
 543             #print "Did %i frames in %f seconds"%(N, (time.time() - start) ) 
 545         def TestHitTest(self
, event
=None): 
 546             wx
.GetApp().Yield(True) 
 548             self
.UnBindAllMouseEvents() 
 553             #Add a Hit-able rectangle 
 561             #Add one that is not HitAble 
 562             Canvas
.AddRectangle((x
,y
), (w
, h
), LineWidth 
= 2) 
 563             Canvas
.AddText("Not Hit-able", (x
,y
), Size 
= FontSize
, Position 
= "bl") 
 567             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2) 
 568             R
.Name 
= "Line Rectangle" 
 570             R
.HitLineWidth 
= 5 # Makes it a little easier to hit 
 571             R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHit
) 
 572             Canvas
.AddText("Left Click Line", (x
,y
), Size 
= FontSize
, Position 
= "bl") 
 573             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 577             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
) 
 578             R
.Name 
= color 
+ "Rectangle" 
 579             R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHit
) 
 580             Canvas
.AddText("Left Click Fill", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 581             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 586             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
) 
 587             R
.Name 
= color 
+ " Rectangle" 
 588             R
.Bind(FloatCanvas
.EVT_FC_RIGHT_DOWN
, self
.RectGotHit
) 
 589             Canvas
.AddText("Right Click Fill", (x
, y
), Size 
= FontSize
,  Position 
= "bl") 
 590             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 594             R 
= Canvas
.AddEllipse((x
, y
), (w
, h
),LineWidth 
= 2,FillColor 
= color
) 
 595             R
.Name 
= color 
+" Ellipse" 
 596             R
.Bind(FloatCanvas
.EVT_FC_RIGHT_DOWN
, self
.RectGotHit
) 
 597             Canvas
.AddText("Right Click Fill", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 598             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 602             R 
= Canvas
.AddCircle((x
+dx
/2, y
+dy
/2), dx
/4, LineWidth 
= 2, FillColor 
= color
) 
 603             R
.Name 
= color 
+ " Circle" 
 605             R
.Bind(FloatCanvas
.EVT_FC_LEFT_DCLICK
, self
.RectGotHit
) 
 606             Canvas
.AddText("Left D-Click Fill", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 607             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 612             R 
= Canvas
.AddCircle((x
+dx
/2, y
+dy
/2), dx
/4, LineWidth 
= 2,FillColor 
= color
) 
 613             R
.Name 
= color 
+  " Circle" 
 614             R
.Bind(FloatCanvas
.EVT_FC_LEFT_UP
, self
.RectGotHit
) 
 615             Canvas
.AddText("Left Up Fill", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 616             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 620             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
) 
 621             R
.Name 
= color 
+ " Rectangle" 
 622             R
.Bind(FloatCanvas
.EVT_FC_MIDDLE_DOWN
, self
.RectGotHit
) 
 623             Canvas
.AddText("Middle Down", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 624             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 628             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
) 
 629             R
.Name 
= color 
+ " Rectangle" 
 630             R
.Bind(FloatCanvas
.EVT_FC_MIDDLE_UP
, self
.RectGotHit
) 
 631             Canvas
.AddText("Middle Up", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 632             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 637             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
) 
 638             R
.Name 
= color 
+ " Rectangle" 
 639             R
.Bind(FloatCanvas
.EVT_FC_MIDDLE_DCLICK
, self
.RectGotHit
) 
 640             Canvas
.AddText("Middle DoubleClick", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 641             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 645             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
) 
 646             R
.Name 
= color 
+ " Rectangle" 
 647             R
.Bind(FloatCanvas
.EVT_FC_RIGHT_UP
, self
.RectGotHit
) 
 648             Canvas
.AddText("Right Up", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 649             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 653             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
) 
 654             R
.Name 
= color 
+ " Rectangle" 
 655             R
.Bind(FloatCanvas
.EVT_FC_RIGHT_DCLICK
, self
.RectGotHit
) 
 656             Canvas
.AddText("Right Double Click", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 657             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 661             color 
= "MEDIUM GOLDENROD" 
 662             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
) 
 664             R
.Bind(FloatCanvas
.EVT_FC_RIGHT_DOWN
, self
.RectGotHitRight
) 
 665             R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHitLeft
) 
 666             Canvas
.AddText("L and R Click", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 667             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 671             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
) 
 672             R
.Name 
= color 
+ " Rectangle" 
 673             R
.Bind(FloatCanvas
.EVT_FC_ENTER_OBJECT
, self
.RectMouseOver
) 
 674             Canvas
.AddText("Mouse Enter", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 675             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 678             color 
= "MEDIUM VIOLET RED" 
 679             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
) 
 681             R
.Bind(FloatCanvas
.EVT_FC_LEAVE_OBJECT
, self
.RectMouseLeave
) 
 682             Canvas
.AddText("Mouse Leave", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 683             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 688             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
) 
 690             R
.Bind(FloatCanvas
.EVT_FC_ENTER_OBJECT
, self
.RectMouseOver
) 
 691             R
.Bind(FloatCanvas
.EVT_FC_LEAVE_OBJECT
, self
.RectMouseLeave
) 
 692             Canvas
.AddText("Enter and Leave", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 693             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 697             R 
= Canvas
.AddRectangle((x
, y
), (w
+12, h
), LineColor 
= None, FillColor 
= color
) 
 699             R
.Bind(FloatCanvas
.EVT_FC_ENTER_OBJECT
, self
.RectMouseOver
) 
 700             R
.Bind(FloatCanvas
.EVT_FC_LEAVE_OBJECT
, self
.RectMouseLeave
) 
 701             Canvas
.AddText("Mouse Enter&Leave", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 702             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 706             R 
= Canvas
.AddRectangle((x
-12, y
), (w
+12, h
), LineColor 
= None, FillColor 
= color
) 
 708             R
.Bind(FloatCanvas
.EVT_FC_ENTER_OBJECT
, self
.RectMouseOver
) 
 709             R
.Bind(FloatCanvas
.EVT_FC_LEAVE_OBJECT
, self
.RectMouseLeave
) 
 710             Canvas
.AddText("Mouse Enter&Leave", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 711             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 715             L 
= Canvas
.AddLine(( (x
, y
), (x
+10, y
+10), (x
+w
, y
+h
) ), LineWidth 
= 2, LineColor 
= "Red") 
 717             L
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHitLeft
) 
 718             Canvas
.AddText("Left Down", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 719             Canvas
.AddText(L
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 723             Points 
= N
.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
) ), N
.float_
) 
 724             R 
= Canvas
.AddPolygon(Points
,  LineWidth 
= 2, FillColor 
= color
) 
 725             R
.Name 
= color 
+ " Polygon" 
 726             R
.Bind(FloatCanvas
.EVT_FC_RIGHT_DOWN
, self
.RectGotHitRight
) 
 727             Canvas
.AddText("RIGHT_DOWN", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 728             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 732             Points 
= N
.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
) ), N
.float_
) 
 733             R 
= Canvas
.AddPointSet(Points
,  Diameter 
= 4, Color 
= color
) 
 735             R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.PointSetGotHit
) 
 736             Canvas
.AddText("LEFT_DOWN", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 737             Canvas
.AddText(R
.Name
, (x
, y
+h
), Size 
= FontSize
, Position 
= "tl") 
 741             T 
= Canvas
.AddText("Hit-able Text", (x
, y
), Size 
= 15, Color 
= "Red", Position 
= 'tl') 
 742             T
.Name 
= "Hit-able Text" 
 743             T
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHitLeft
) 
 744             Canvas
.AddText("Left Down", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 747             T 
= Canvas
.AddScaledText("Scaled Text", (x
, y
), Size 
= 1./2*h
, Color 
= "Pink", Position 
= 'bl') 
 748             Canvas
.AddPointSet( (x
, y
), Diameter 
= 3) 
 749             T
.Name 
= "Scaled Text" 
 750             T
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHitLeft
) 
 751             Canvas
.AddText("Left Down", (x
, y
), Size 
= FontSize
, Position 
= "tl") 
 756             #Points = N.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) ), N.float_) 
 757             R 
= Canvas
.AddSquarePoint(Point
,  Size 
= 8, Color 
= color
) 
 758             R
.Name 
= "SquarePoint" 
 759             R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHit
) 
 760             Canvas
.AddText("LEFT_DOWN", (x
, y
), Size 
= FontSize
, Position 
= "bl") 
 761             Canvas
.AddText(R
.Name
, (x
, y
), Size 
= FontSize
, Position 
= "tl") 
 764             self
.Canvas
.ZoomToBB() 
 766         def TestHitTestForeground(self
,event
=None): 
 767             wx
.GetApp().Yield(True) 
 769             self
.UnBindAllMouseEvents() 
 774             #Add a Hitable rectangle 
 782             R 
= Canvas
.AddRectangle((x
, y
), (w
, h
), LineWidth 
= 2, FillColor 
= color
, InForeground 
= False) 
 783             R
.Name 
= color 
+ "Rectangle" 
 785             R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectGotHit
) 
 786             Canvas
.AddText("Left Click Fill", (x
, y
), Position 
= "bl") 
 787             Canvas
.AddText(R
.Name
, (x
, y
+h
), Position 
= "tl") 
 789             ## A set of Rectangles that move together 
 791             ## NOTE: In a real app, it might be better to create a new 
 792             ## custom FloatCanvas DrawObject 
 794             self
.MovingRects 
= [] 
 798             R 
= Canvas
.AddRectangle((x
, y
), WH
, LineWidth 
= 2, FillColor 
= color
, InForeground 
= True) 
 800             R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectMoveLeft
) 
 801             L 
= Canvas
.AddText("Left", (x 
+ w
/4, y 
+ h
/4), Position 
= "cc", InForeground 
= True) 
 802             self
.MovingRects
.extend( (R
,L
) ) 
 805             R 
= Canvas
.AddRectangle((x
, y
), WH
, LineWidth 
= 2, FillColor 
= color
, InForeground 
= True) 
 807             R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectMoveRight
) 
 808             L 
= Canvas
.AddText("Right", (x 
+ w
/4, y 
+ h
/4), Position 
= "cc", InForeground 
= True) 
 809             self
.MovingRects
.extend( (R
,L
) ) 
 813             R 
= Canvas
.AddRectangle((x
, y
), WH
, LineWidth 
= 2, FillColor 
= color
, InForeground 
= True) 
 815             R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectMoveUp
) 
 816             L 
= Canvas
.AddText("Up", (x 
+ w
/4, y 
+ h
/4), Position 
= "cc", InForeground 
= True) 
 817             self
.MovingRects
.extend( (R
,L
) ) 
 821             R 
= Canvas
.AddRectangle((x
, y
), WH
, LineWidth 
= 2, FillColor 
= color
, InForeground 
= True) 
 823             R
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RectMoveDown
) 
 824             L 
= Canvas
.AddText("Down", (x 
+ w
/4, y 
+ h
/4), Position 
= "cc", InForeground 
= True) 
 825             self
.MovingRects
.extend( (R
,L
) ) 
 827             self
.Canvas
.ZoomToBB() 
 829         def RectMoveLeft(self
,Object
): 
 830             self
.MoveRects("left") 
 832         def RectMoveRight(self
,Object
): 
 833             self
.MoveRects("right") 
 835         def RectMoveUp(self
,Object
): 
 838         def RectMoveDown(self
,Object
): 
 839             self
.MoveRects("down") 
 841         def MoveRects(self
, Dir
): 
 842             for Object 
in self
.MovingRects
: 
 844                 if Dir 
== "left": X 
-= 10 
 845                 elif Dir 
== "right": X 
+= 10 
 846                 elif Dir 
== "up": Y 
+= 10 
 847                 elif Dir 
== "down": Y 
-= 10 
 848                 Object
.SetPoint((X
,Y
)) 
 851         def PointSetGotHit(self
, Object
): 
 852             self
.Log(Object
.Name 
+ "Got Hit\n") 
 854         def RectGotHit(self
, Object
): 
 855             self
.Log(Object
.Name 
+ "Got Hit\n") 
 857         def RectGotHitRight(self
, Object
): 
 858             self
.Log(Object
.Name 
+ "Got Hit With Right\n") 
 860         def RectGotHitLeft(self
, Object
): 
 861             self
.Log(Object
.Name 
+ "Got Hit with Left\n") 
 863         def RectMouseOver(self
, Object
): 
 864             self
.Log("Mouse entered:" +  Object
.Name
) 
 866         def RectMouseLeave(self
, Object
): 
 867             self
.Log("Mouse left " +  Object
.Name
) 
 870         def TestText(self
, event
= None): 
 871             wx
.GetApp().Yield(True) 
 873             self
.BindAllMouseEvents() 
 881             ## Add a non-visible rectangle, just to get a Bounding Box 
 882             ## Text objects have a zero-size bounding box, because it changes with zoom 
 883             Canvas
.AddRectangle((-10,-10), 
 890             self
.Canvas
.AddText("Top Left",Point
,Size 
= DefaultSize
,Color 
= "Yellow",BackgroundColor 
= "Blue", Position 
= "tl") 
 891             self
.Canvas
.AddText("Bottom Left",Point
,Size 
= DefaultSize
,Color 
= "Cyan",BackgroundColor 
= "Black",Position 
= "bl") 
 892             self
.Canvas
.AddText("Top Right",Point
,Size 
= DefaultSize
,Color 
= "Black",BackgroundColor 
= "Cyan",Position 
= "tr") 
 893             self
.Canvas
.AddText("Bottom Right",Point
,Size 
= DefaultSize
,Color 
= "Blue",BackgroundColor 
= "Yellow",Position 
= "br") 
 894             Canvas
.AddPointSet((Point
), Color 
= "White", Diameter 
= 2) 
 898             Canvas
.AddPointSet((Point
), Color 
= "White", Diameter 
= 2) 
 899             self
.Canvas
.AddText("Top Center",Point
,Size 
= DefaultSize
,Color 
= "Black",Position 
= "tc") 
 900             self
.Canvas
.AddText("Bottom Center",Point
,Size 
= DefaultSize
,Color 
= "White",Position 
= "bc") 
 904             Canvas
.AddPointSet((Point
), Color 
= "White", Diameter 
= 2) 
 905             self
.Canvas
.AddText("Center Right",Point
,Size 
= DefaultSize
,Color 
= "Black",Position 
= "cr") 
 906             self
.Canvas
.AddText("Center Left",Point
,Size 
= DefaultSize
,Color 
= "Black",Position 
= "cl") 
 910             Canvas
.AddPointSet((Point
), Color 
= "White", Diameter 
= 2) 
 911             self
.Canvas
.AddText("Center Center", 
 912                                 Point
, Size 
= DefaultSize
, 
 916             self
.Canvas
.AddText("40 Pixels", (-10,8), Size 
= 40) 
 917             self
.Canvas
.AddText("20 Pixels", (-10,5), Size 
= 20) 
 918             self
.Canvas
.AddText("10 Pixels", (-10,3), Size 
= 10) 
 920             self
.Canvas
.AddText("MODERN Font", (-10, 0), Family 
= wx
.MODERN
) 
 921             self
.Canvas
.AddText("DECORATIVE Font", (-10, -1), Family 
= wx
.DECORATIVE
) 
 922             self
.Canvas
.AddText("ROMAN Font", (-10, -2), Family 
= wx
.ROMAN
) 
 923             self
.Canvas
.AddText("SCRIPT Font", (-10, -3), Family 
= wx
.SCRIPT
) 
 924             self
.Canvas
.AddText("ROMAN BOLD Font", (-10, -4), Family 
= wx
.ROMAN
, Weight
=wx
.BOLD
) 
 925             self
.Canvas
.AddText("ROMAN ITALIC BOLD Font", (-10, -5), Family 
= wx
.ROMAN
, Weight
=wx
.BOLD
, Style
=wx
.ITALIC
) 
 927             # NOTE: this font exists on my Linux box..who knows were else you'll find it! 
 928             Font 
= wx
.Font(20, wx
.DEFAULT
, wx
.ITALIC
, wx
.NORMAL
, False, "helvetica") 
 929             self
.Canvas
.AddText("Helvetica Italic", (-10, -6), Font 
= Font
) 
 931             self
.Canvas
.ZoomToBB() 
 933         def TestScaledText(self
, event
= None): 
 934             wx
.GetApp().Yield(True) 
 936             self
.BindAllMouseEvents() 
 942             T 
= Canvas
.AddScaledText("Top Left", 
 946                                      BackgroundColor 
= "Blue", 
 948             T 
= Canvas
.AddScaledText("Bottom Left",Point
,Size 
= 5,Color 
= "Cyan",BackgroundColor 
= "Black",Position 
= "bl") 
 949             T 
= Canvas
.AddScaledText("Top Right",Point
,Size 
= 5,Color 
= "Black",BackgroundColor 
= "Cyan",Position 
= "tr") 
 950             T 
= Canvas
.AddScaledText("Bottom Right",Point
,Size 
= 5,Color 
= "Blue",BackgroundColor 
= "Yellow",Position 
= "br") 
 951             Canvas
.AddPointSet((Point
), Color 
= "Red", Diameter 
= 4) 
 956             Canvas
.AddScaledText("Top Center",Point
,Size 
= 7,Color 
= "Black",Position 
= "tc") 
 957             Canvas
.AddScaledText("Bottom Center",Point
,Size 
= 7,Color 
= "White",Position 
= "bc") 
 958             Canvas
.AddPointSet((Point
), Color 
= "White", Diameter 
= 4) 
 962             Canvas
.AddScaledText("Center Right",Point
,Size 
= 9,Color 
= "Black",Position 
= "cr") 
 963             Canvas
.AddScaledText("Center Left",Point
,Size 
= 9,Color 
= "Black",Position 
= "cl") 
 964             Canvas
.AddPointSet((Point
), Color 
= "White", Diameter 
= 4) 
 968             self
.Canvas
.AddScaledText("MODERN Font", (x
, 0), Size 
= 7, Family 
= wx
.MODERN
, Color 
= (0,0,0)) 
 969             self
.Canvas
.AddScaledText("DECORATIVE Font", (x
, -10), Size 
= 7, Family 
= wx
.DECORATIVE
, Color 
= (0,0,1)) 
 970             self
.Canvas
.AddScaledText("ROMAN Font", (x
, -20), Size 
= 7, Family 
= wx
.ROMAN
) 
 971             self
.Canvas
.AddScaledText("SCRIPT Font", (x
, -30), Size 
= 7, Family 
= wx
.SCRIPT
) 
 972             self
.Canvas
.AddScaledText("ROMAN BOLD Font", (x
, -40), Size 
= 7, Family 
= wx
.ROMAN
, Weight
=wx
.BOLD
) 
 973             self
.Canvas
.AddScaledText("ROMAN ITALIC BOLD Font", (x
, -50), Size 
= 7, Family 
= wx
.ROMAN
, Weight
=wx
.BOLD
, Style
=wx
.ITALIC
) 
 974             Canvas
.AddPointSet((x
,0), Color 
= "White", Diameter 
= 4) 
 977             # NOTE: this font exists on my OS-X.who knows were else you'll find it! 
 979             Font 
= wx
.Font(12, wx
.DEFAULT
, wx
.ITALIC
, wx
.NORMAL
, False, "helvetica") 
 980             T 
= self
.Canvas
.AddScaledText("Helvetica Italic", Point
, Size 
= 20, Font 
= Font
, Position 
= 'bc') 
 983             Font 
= wx
.Font(12, wx
.DEFAULT
, wx
.ITALIC
, wx
.NORMAL
, False, "times") 
 984             T 
= self
.Canvas
.AddScaledText("Times Font", Point
, Size 
= 8, Font 
= Font
) 
 986             self
.Canvas
.ZoomToBB() 
 988         def TestScaledTextBox(self
, event
= None): 
 989             wx
.GetApp().Yield(True) 
 991             self
.UnBindAllMouseEvents() 
 996             Box 
= Canvas
.AddScaledTextBox("A Two Line\nString", 
1000                                           BackgroundColor 
= None, 
1002                                           LineStyle 
= "Solid", 
1012                                           InForeground 
= False) 
1015             Box 
= Canvas
.AddScaledTextBox("A Two Line\nString", 
1019             Box 
= Canvas
.AddScaledTextBox("A Two Line\nString", 
1022                                           BackgroundColor 
= "Yellow", 
1024                                           LineStyle 
= "Solid", 
1026                                           Family 
= wx
.TELETYPE
, 
1029             Box 
= Canvas
.AddScaledTextBox("A String\nThis box is clickable", 
1032                                           BackgroundColor 
= "Yellow", 
1034                                           LineStyle 
= "Solid", 
1036                                           Family 
= wx
.TELETYPE
, 
1039             Box
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.binding2
) 
1041             Canvas
.AddPoint(Point
, Diameter 
= 4) 
1044             Box 
= Canvas
.AddScaledTextBox("A Two Line\nString", 
1048                                           BackgroundColor 
= 'Red', 
1050                                           LineStyle 
= "LongDash", 
1054                                           Family 
= wx
.TELETYPE
, 
1060                                           InForeground 
= False) 
1062             Box 
= Canvas
.AddScaledTextBox("A Two Line\nString", 
1066                                           BackgroundColor 
= 'Red', 
1068                                           LineStyle 
= "LongDash", 
1072                                           Family 
= wx
.TELETYPE
, 
1078                                           InForeground 
= False) 
1080             Canvas
.AddPoint(Point
, Diameter 
= 4) 
1083             Box 
= Canvas
.AddScaledTextBox("A Two Line\nString", 
1087                                           BackgroundColor 
= 'Red', 
1089                                           LineStyle 
= "LongDash", 
1093                                           Family 
= wx
.TELETYPE
, 
1099                                           InForeground 
= False) 
1101             Box 
= Canvas
.AddScaledTextBox("A three\nLine\nString", 
1105                                           BackgroundColor 
= 'Red', 
1107                                           LineStyle 
= "LongDash", 
1111                                           Family 
= wx
.TELETYPE
, 
1117                                           InForeground 
= False) 
1120             Canvas
.AddPoint(Point
, Diameter 
= 4) 
1122             Box 
= Canvas
.AddScaledTextBox("Some Auto Wrapped Text. There is enough to do.", 
1125                                           BackgroundColor 
= 'White', 
1129                                           Family 
= wx
.TELETYPE
, 
1132             Box 
= Canvas
.AddScaledTextBox("Some more auto wrapped text. Wrapped to a different width.\n\nThis is another paragraph.", 
1135                                           BackgroundColor 
= 'White', 
1142             Point 
= N
.array((100, -20), N
.float_
) 
1143             Box 
= Canvas
.AddScaledTextBox("Here is even more auto wrapped text. This time the line spacing is set to 0.8. \n\nThe Padding is set to 0.", 
1146                                           BackgroundColor 
= 'White', 
1154             Canvas
.AddPoint(Point
, "Red", 2) 
1156             Point 
= N
.array((0, -40), N
.float_
) 
1157     #        Point = N.array((0, 0), N.float_) 
1158             for Position 
in ["tl", "bl", "tr", "br"]: 
1159     #        for Position in ["br"]: 
1160                 Box 
= Canvas
.AddScaledTextBox("Here is a\nfour liner\nanother line\nPosition=%s"%Position
, 
1164                                           BackgroundColor 
= None,#'LightBlue', 
1166                                           LineColor 
= "White", 
1170                                           Position 
= Position
, 
1173             Canvas
.AddPoint(Point
, "Red", 4) 
1175             Point 
= N
.array((-20, 60), N
.float_
) 
1176             Box 
= Canvas
.AddScaledTextBox("Here is some\ncentered\ntext", 
1180                                           BackgroundColor 
= 'LightBlue', 
1182                                           LineColor 
= "White", 
1187                                           Alignment 
= "center", 
1191             Point 
= N
.array((-20, 20), N
.float_
) 
1192             Box 
= Canvas
.AddScaledTextBox("Here is some\nright aligned\ntext", 
1196                                           BackgroundColor 
= 'LightBlue', 
1202                                           Alignment 
= "right", 
1206             Point 
= N
.array((100, -60), N
.float_
) 
1207             Box 
= Canvas
.AddScaledTextBox("Here is some auto wrapped text. This time it is centered, rather than right aligned.\n\nThe Padding is set to 2.", 
1210                                           BackgroundColor 
= 'White', 
1217                                           Alignment 
= 'center', 
1223             self
.Canvas
.ZoomToBB() 
1225         def binding2(self
, event
): 
1226             self
.Log("I'm the TextBox") 
1228         def TestBitmap(self
, event
= None): 
1229             wx
.GetApp().Yield(True) 
1231             self
.UnBindAllMouseEvents() 
1232             Canvas 
= self
.Canvas
 
1235             Canvas
.AddRectangle((10, 20), 
1241             bmp 
= Resources
.getMagPlusBitmap() 
1243             Canvas
.AddText("These are Unscaled Bitmaps:", (140, 90)) 
1246             BitMap 
= Canvas
.AddBitmap(bmp
, Point
, Position 
= "cc" ) 
1247             Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green") 
1250             BitMap 
= Canvas
.AddBitmap(bmp
, Point
, Position 
= "br" ) 
1251             Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green") 
1254             BitMap 
= Canvas
.AddBitmap(bmp
, Point
, Position 
= "bl" ) 
1255             Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green") 
1258             BitMap 
= Canvas
.AddBitmap(bmp
, Point
, Position 
= "tr" ) 
1259             Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green") 
1262             BitMap 
= Canvas
.AddBitmap(bmp
, Point
, Position 
= "tl" ) 
1263             Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green") 
1266             BitMap 
= Canvas
.AddBitmap(bmp
, Point
, Position 
= "cr" ) 
1267             Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green") 
1270             BitMap 
= Canvas
.AddBitmap(bmp
, Point
, Position 
= "cl" ) 
1271             Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green") 
1274             BitMap 
= Canvas
.AddBitmap(bmp
, Point
, Position 
= "tc" ) 
1275             Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green") 
1278             BitMap 
= Canvas
.AddBitmap(bmp
, Point
, Position 
= "bc" ) 
1279             Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green") 
1281             Canvas
.AddScaledText("These are Scaled Bitmaps:", (220, -60), Size 
= 10, Position 
= "tr") 
1283             BitMap 
= Canvas
.AddScaledBitmap(bmp
, Point
, Height 
= 50, Position 
= "bc" ) 
1284             BitMap 
= Canvas
.AddScaledBitmap(bmp
, Point
, Height 
= 50, Position 
= "tc" ) 
1285             Canvas
.AddPoint(Point
, Diameter
=4, Color
="Green") 
1288             BitMap 
= Canvas
.AddScaledBitmap(Resources
.getMondrianImage(), Point
, Height 
= 50) 
1290             self
.Canvas
.ZoomToBB() 
1292         def DrawMap(self
,event 
= None): 
1293             wx
.GetApp().Yield(True) 
1296             self
.Canvas
.InitAll() 
1297             self
.Canvas
.SetProjectionFun("FlatEarth") 
1298             self
.BindAllMouseEvents() 
1300         ## Test of Actual Map Data 
1301             #start = time.clock() 
1302             self
.Log("Loading Map from a File") 
1303             wx
.GetApp().Yield(True) # so log text will get displayed now. 
1304             Shorelines 
= self
.Read_MapGen(os
.path
.join("data",'world.dat'),stats 
= 0) 
1305             #print "It took %f seconds to load %i shorelines"%(time.clock() - start,len(Shorelines) ) 
1306             #start = time.clock() 
1307             for segment 
in Shorelines
: 
1308                 self
.Canvas
.AddLine(segment
) 
1309             #print "It took %f seconds to add %i shorelines"%(time.clock() - start,len(Shorelines) ) 
1310             #start = time.clock() 
1311             self
.Canvas
.ZoomToBB() 
1312             #print "It took %f seconds to draw %i shorelines"%(time.clock() - start,len(Shorelines) ) 
1316         def LineTest(self
,event 
= None): 
1317             wx
.GetApp().Yield(True) 
1320             colors 
= self
.colors
 
1322         ## Test of drawing lots of lines 
1323             Canvas 
= self
.Canvas
 
1325                         #start = time.clock() 
1329             for i 
in range(2000): 
1330                 points 
= (random
.randint(Range
[0],Range
[1]), 
1331                          random
.randint(Range
[0],Range
[1]), 
1332                          random
.randint(Range
[0],Range
[1]), 
1333                          random
.randint(Range
[0],Range
[1])) 
1334                 linepoints
.append(points
) 
1335                 linewidths
.append(random
.randint(1,10) ) 
1336                 linecolors
.append(random
.randint(0,len(colors
)-1) ) 
1337             for (points
,color
,width
) in zip(linepoints
,linecolors
,linewidths
): 
1338                 Canvas
.AddLine((points
[0:2],points
[2:4]), LineWidth 
= width
, LineColor 
= colors
[color
]) 
1339             #print "It took %f seconds to add %i lines"%(time.clock() - start,len(linepoints) ) 
1340             #start = time.clock() 
1342             #print "It took %f seconds to draw %i lines"%(time.clock() - start,len(linepoints) ) 
1344         def ArrowLineTest(self
,event 
= None): 
1345             wx
.GetApp().Yield(True) 
1346             Canvas 
= self
.Canvas
 
1351             colors 
= self
.colors
 
1356                 for j 
in range(random
.randint(2,10)): 
1357                     point 
= (random
.randint(Range
[0],Range
[1]),random
.randint(Range
[0],Range
[1])) 
1358                     points
.append(point
) 
1359                 lw 
= random
.randint(1,4) 
1360                 cf 
= random
.randint(0,len(colors
)-1) 
1361                 cl 
= random
.randint(0,len(colors
)-1) 
1362                 al 
= random
.randint(8,20) 
1363                 aa 
= random
.randint(20,90) 
1364                 Canvas
.AddArrowLine(points
, 
1366                                     LineColor 
= colors
[cl
], 
1368                                     ArrowHeadAngle 
= aa
) 
1372         def SpeedTest(self
,event
=None): 
1373             wx
.GetApp().Yield(True) 
1374             BigRange 
= (-1000,1000) 
1375             colors 
= self
.colors
 
1377             self
.UnBindAllMouseEvents() 
1378             Canvas 
= self
.Canvas
 
1384             for i 
in range(1000): 
1385                 Point 
= (random
.uniform(BigRange
[0],BigRange
[1]),random
.uniform(BigRange
[0],BigRange
[1])) 
1386                 coords
.append( (Point
) ) 
1387             print "Drawing the Points" 
1388             start 
= time
.clock() 
1389             for Point 
in coords
: 
1390                 Canvas
.AddPoint(Point
, Diameter 
= 4) 
1391             print "It took %s seconds to add the points"%(time
.clock() - start
) 
1394         def PropertiesChangeTest(self
,event
=None): 
1395             wx
.GetApp().Yield(True) 
1398             colors 
= self
.colors
 
1400             self
.UnBindAllMouseEvents() 
1401             Canvas 
= self
.Canvas
 
1405             self
.ColorObjectsAll 
= [] 
1406             self
.ColorObjectsLine 
= [] 
1407             self
.ColorObjectsColor 
= [] 
1408             self
.ColorObjectsText 
= [] 
1409             ##One of each object: 
1411             Point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
1412             lw 
= random
.randint(1,5) 
1413             cf 
= random
.randint(0,len(colors
)-1) 
1414             wh 
= ( random
.randint(1,5), random
.randint(1,5) ) 
1415             self
.Rectangle 
= Canvas
.AddRectangle(Point
, wh
, LineWidth 
= lw
, FillColor 
= colors
[cf
]) 
1416             self
.ColorObjectsAll
.append(self
.Rectangle
) 
1419             Point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
1420             lw 
= random
.randint(1,5) 
1421             cf 
= random
.randint(0,len(colors
)-1) 
1422             wh 
= ( random
.randint(1,5), random
.randint(1,5) ) 
1423             self
.Ellipse 
= Canvas
.AddEllipse(Point
, wh
, LineWidth 
= lw
, FillColor 
= colors
[cf
]) 
1424             self
.ColorObjectsAll
.append(self
.Ellipse
) 
1427             xy 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
1428             D 
= random
.randint(1,50) 
1429             lw 
= random
.randint(1,5) 
1430             cf 
= random
.randint(0,len(colors
)-1) 
1431             cl 
= random
.randint(0,len(colors
)-1) 
1432             self
.ColorObjectsColor
.append(Canvas
.AddPoint(xy
, colors
[cf
], D
)) 
1435             Point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
1436             D 
= random
.randint(1,5) 
1437             lw 
= random
.randint(1,5) 
1438             cf 
= random
.randint(0,len(colors
)-1) 
1439             cl 
= random
.randint(0,len(colors
)-1) 
1440             self
.Circle 
= Canvas
.AddCircle(Point
, D
, LineWidth 
= lw
, LineColor 
= colors
[cl
], FillColor 
= colors
[cf
]) 
1441             self
.ColorObjectsAll
.append(self
.Circle
) 
1445             for j 
in range(random
.randint(2,10)): 
1446                 point 
= (random
.randint(Range
[0],Range
[1]),random
.randint(Range
[0],Range
[1])) 
1447                 points
.append(point
) 
1448             lw 
= random
.randint(1,10) 
1449             cf 
= random
.randint(0,len(colors
)-1) 
1450             cl 
= random
.randint(0,len(colors
)-1) 
1451             self
.ColorObjectsLine
.append(Canvas
.AddLine(points
, LineWidth 
= lw
, LineColor 
= colors
[cl
])) 
1455 ##            for j in range(random.randint(2,6)): 
1456 ##                point = (random.uniform(Range[0],Range[1]),random.uniform(Range[0],Range[1])) 
1457 ##                points.append(point) 
1458             points 
= RandomArray
.uniform(Range
[0],Range
[1],(6,2)) 
1459             lw 
= random
.randint(1,6) 
1460             cf 
= random
.randint(0,len(colors
)-1) 
1461             cl 
= random
.randint(0,len(colors
)-1) 
1462             self
.ColorObjectsAll
.append(Canvas
.AddPolygon(points
, 
1464                                                        LineColor 
= colors
[cl
], 
1465                                                        FillColor 
= colors
[cf
], 
1466                                                        FillStyle 
= 'Solid')) 
1469             points 
= RandomArray
.uniform(Range
[0],Range
[1],(100,2)) 
1470             cf 
= random
.randint(0,len(colors
)-1) 
1471             D 
= random
.randint(1,4) 
1472             self
.PointSet 
= Canvas
.AddPointSet(points
, Color 
= colors
[cf
], Diameter 
= D
) 
1473             self
.ColorObjectsColor
.append(self
.PointSet
) 
1476             point 
= RandomArray
.uniform(Range
[0],Range
[1],(2,)) 
1477             cf 
= random
.randint(0,len(colors
)-1) 
1478             D 
= random
.randint(1,4) 
1479             self
.Point 
= Canvas
.AddPoint(point
, Color 
= colors
[cf
], Diameter 
= D
) 
1480             self
.ColorObjectsColor
.append(self
.Point
) 
1483             String 
= "Unscaled text" 
1484             ts 
= random
.randint(10,40) 
1485             cf 
= random
.randint(0,len(colors
)-1) 
1486             Point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
1487             self
.ColorObjectsText
.append(Canvas
.AddText(String
, Point
, Size 
= ts
, Color 
= colors
[cf
], Position 
= "cc")) 
1490             String 
= "Scaled text" 
1491             ts 
= random
.random()*3 + 0.2 
1492             cf 
= random
.randint(0,len(colors
)-1) 
1493             Point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
1494             self
.ColorObjectsText
.append(Canvas
.AddScaledText(String
, Point
, Size 
= ts
, Color 
= colors
[cf
], Position 
= "cc")) 
1497             Button 
= Canvas
.AddRectangle((-10, -12), (20, 3), LineStyle 
= None, FillColor 
= "Red") 
1498             Canvas
.AddScaledText("Click Here To Change Properties", 
1504             Button
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.ChangeProperties
) 
1508         def ChangeProperties(self
, Object 
= None): 
1509             colors 
= self
.colors
 
1512             for Object 
in self
.ColorObjectsAll
: 
1514                 Object
.SetFillColor(colors
[random
.randint(0,len(colors
)-1)]) 
1515                 Object
.SetLineColor(colors
[random
.randint(0,len(colors
)-1)]) 
1516                 Object
.SetLineWidth(random
.randint(1,7)) 
1517                 Object
.SetLineStyle(FloatCanvas
.DrawObject
.LineStyleList
.keys()[random
.randint(0,5)]) 
1518             for Object 
in self
.ColorObjectsLine
: 
1519                 Object
.SetLineColor(colors
[random
.randint(0,len(colors
)-1)]) 
1520                 Object
.SetLineWidth(random
.randint(1,7)) 
1521                 Object
.SetLineStyle(FloatCanvas
.DrawObject
.LineStyleList
.keys()[random
.randint(0,5)]) 
1522             for Object 
in self
.ColorObjectsColor
: 
1523                 Object
.SetColor(colors
[random
.randint(0,len(colors
)-1)]) 
1524             for Object 
in self
.ColorObjectsText
: 
1525                 Object
.SetColor(colors
[random
.randint(0,len(colors
)-1)]) 
1526                 Object
.SetBackgroundColor(colors
[random
.randint(0,len(colors
)-1)]) 
1527             self
.Circle
.SetDiameter(random
.randint(1,10)) 
1528             self
.PointSet
.SetDiameter(random
.randint(1,8)) 
1529             self
.Point
.SetDiameter(random
.randint(1,8)) 
1530             for Object 
in (self
.Rectangle
, self
.Ellipse
): 
1531                 Point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
1532                 wh 
= ( random
.randint(1,5), random
.randint(1,5) ) 
1533                 Object
.SetShape(Point
, wh
) 
1534             self
.Canvas
.Draw(Force 
= True) 
1536         def ArrowTest(self
,event
=None): 
1537             wx
.GetApp().Yield(True) 
1538             self
.UnBindAllMouseEvents() 
1539             Canvas 
= self
.Canvas
 
1542             Canvas
.MinScale 
= 15 
1543             Canvas
.MaxScale 
= 30 
1545             # put in a rectangle to get a bounding box 
1546             Canvas
.AddRectangle((0,0), (20,20), LineColor 
= None) 
1549             Canvas
.AddArrow((10,10),Length 
= 40, Direction 
= 0) 
1550             Canvas
.AddArrow((10,10),Length 
= 50, Direction 
= 45 ,LineWidth 
= 2, LineColor 
= "Black", ArrowHeadAngle 
= 20) 
1551             Canvas
.AddArrow((10,10),Length 
= 60, Direction 
= 90 ,LineWidth 
= 3, LineColor 
= "Red",   ArrowHeadAngle 
= 30) 
1552             Canvas
.AddArrow((10,10),Length 
= 70, Direction 
= 135,LineWidth 
= 4, LineColor 
= "Red",   ArrowHeadAngle 
= 40) 
1553             Canvas
.AddArrow((10,10),Length 
= 80, Direction 
= 180,LineWidth 
= 5, LineColor 
= "Blue",  ArrowHeadAngle 
= 50) 
1554             Canvas
.AddArrow((10,10),Length 
= 90, Direction 
= 225,LineWidth 
= 4, LineColor 
= "Blue",  ArrowHeadAngle 
= 60) 
1555             Canvas
.AddArrow((10,10),Length 
= 100,Direction 
= 270,LineWidth 
= 3, LineColor 
= "Green", ArrowHeadAngle 
= 70) 
1556             Canvas
.AddArrow((10,10),Length 
= 110,Direction 
= 315,LineWidth 
= 2, LineColor 
= "Green", ArrowHeadAngle 
= 90 ) 
1558             Canvas
.AddText("Clickable Arrow", (4,18), Position 
= "bc") 
1559             Arrow 
= Canvas
.AddArrow((4,18), 80, Direction 
= 90 ,LineWidth 
= 3, LineColor 
= "Red",   ArrowHeadAngle 
= 30) 
1560             Arrow
.HitLineWidth 
= 6 
1561             Arrow
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.ArrowClicked
) 
1563             Canvas
.AddText("Changable Arrow: try clicking it", (16,4), Position 
= "tc") 
1564             self
.RotArrow 
= Canvas
.AddArrow((16,4), 80, Direction 
= 0 ,LineWidth 
= 3, LineColor 
= "Green",   ArrowHeadAngle 
= 30) 
1565             self
.RotArrow
.HitLineWidth 
= 6 
1566             self
.RotArrow
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.RotateArrow
) 
1570         def ArrowClicked(self
,event
): 
1571             self
.Log("The Arrow was Clicked") 
1573         def RotateArrow(self
,event
): 
1574             ##print "The Changeable Arrow was Clicked" 
1575             ## You can do them either one at a time, or both at once 
1576             ## Doing them both at once prevents the arrow points from being calculated twice 
1577             #self.RotArrow.SetDirection(self.RotArrow.Direction + random.uniform(-90,90)) 
1578             #self.RotArrow.SetLength(self.RotArrow.Length + random.randint(-20,20)) 
1579             self
.RotArrow
.SetLengthDirection(self
.RotArrow
.Length 
+ random
.randint(-20,20), 
1580                                              self
.RotArrow
.Direction 
+ random
.uniform(-90,90) ) 
1582             self
.Canvas
.Draw(Force 
= True) 
1584         def HideTest(self
, event
=None): 
1585             wx
.GetApp().Yield(True) 
1587             self
.UnBindAllMouseEvents() 
1588             Canvas 
= self
.Canvas
 
1593             # Create a couple random Polygons 
1596                 point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
1597                 points
.append(point
) 
1598             Poly 
= Canvas
.AddPolygon(points
, 
1600                                      LineColor 
= "Black", 
1601                                      FillColor 
= "LightBlue", 
1602                                      FillStyle 
= 'Solid') 
1606                 point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
1607                 points
.append(point
) 
1608             Poly2 
= Canvas
.AddPolygon(points
, 
1610                                      LineColor 
= "Black", 
1611                                      FillColor 
= "Purple", 
1612                                      FillStyle 
= 'Solid', 
1613                                      InForeground 
= True) 
1615             HideButton 
= Canvas
.AddScaledTextBox("Click To Hide\nBackground Polygon", 
1618                                                       BackgroundColor
="Red", 
1623             HideButton
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.HidePoly
) 
1624             HideButton
.HidePoly 
= Poly
 
1626             HideButton2 
= Canvas
.AddScaledTextBox("Click To Hide\nForeground Polygon", 
1629                                                       BackgroundColor
="Red", 
1634             # Put a reference to the Polygon in the Button object 
1635             HideButton2
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.HidePoly
) 
1636             HideButton2
.HidePoly 
= Poly2
 
1641         def HidePoly(self
, Button
): 
1642             Poly 
= Button
.HidePoly
 
1645                 Poly
.Visible 
= False 
1646                 Button
.SetText(Button
.String
.replace("Hide","Show")) 
1649                 Button
.SetText(Button
.String
.replace("Show", "Hide")) 
1650             self
.Canvas
.Draw(True) 
1653         def TempTest(self
, event
= None): 
1656             This is the start of a poly editor test, but it's not complete 
1657             so you can only run it through a command line flag: 
1659             python FloatCanvasDemo.py --temp 
1663             wx
.GetApp().Yield(True) 
1665             self
.UnBindAllMouseEvents() 
1666             Canvas 
= self
.Canvas
 
1671             # Create a random Polygon 
1674                 point 
= (random
.uniform(Range
[0],Range
[1]),random
.uniform(Range
[0],Range
[1])) 
1675                 points
.append(point
) 
1676             Poly 
= Canvas
.AddPolygon(points
, 
1678                                      LineColor 
= "Black", 
1679                                      FillColor 
= "LightBlue", 
1680                                      FillStyle 
= 'Solid') 
1682             Poly
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.SelectPoly
) 
1684             self
.SelectedPoly 
= None 
1685             self
.SelectPoints 
= [] 
1686             self
.SelectedPoint 
= None 
1690         def SelectPoly(self
, Object
): 
1691             Canvas 
= self
.Canvas
 
1692             if Object 
is self
.SelectedPoly
: 
1695                 #fixme: Do something to unselect the old one 
1696                 self
.SelectedPoly 
= Object
 
1697                 Canvas
.RemoveObjects(self
.SelectPoints
) 
1698                 self
.SelectPoints 
= [] 
1699             # Draw points on the Vertices of the Selected Poly: 
1700             for i
, point 
in enumerate(Object
.Points
): 
1701                 P 
= Canvas
.AddPointSet(point
, Diameter 
= 6, Color 
= "Red") 
1703                 P
.Bind(FloatCanvas
.EVT_FC_LEFT_DOWN
, self
.SelectPointHit
) 
1704                 self
.SelectPoints
.append(P
) 
1708         def SelectPointHit(self
, Point
): 
1709             self
.Log("Point Num: %i Hit"%Point
.VerticeNum
) 
1710             self
.SelectedPoint 
= Point
 
1712         def Read_MapGen(self
, filename
, stats 
= 0,AllLines
=0): 
1714             This function reads a MapGen Format file, and 
1715             returns a list of NumPy arrays with the line segments in them. 
1717             Each NumPy array in the list is an NX2 array of Python Floats. 
1719             The demo should have come with a file, "world.dat" that is the 
1720             shorelines of the whole world, in MapGen format. 
1724             file = open(filename
,'rt') 
1725             data 
= file.readlines() 
1726             data 
= map(string
.strip
,data
) 
1732                     if line 
== "# -b": #New segment beginning 
1733                         if segment
: Shorelines
.append(N
.array(segment
)) 
1736                         segment
.append(map(float,string
.split(line
))) 
1737             if segment
: Shorelines
.append(N
.array(segment
)) 
1740                 NumSegments 
= len(Shorelines
) 
1742                 for segment 
in Shorelines
: 
1743                     NumPoints 
= NumPoints 
+ len(segment
) 
1744                 AvgPoints 
= NumPoints 
/ NumSegments
 
1745                 print "Number of Segments: ", NumSegments
 
1746                 print "Average Number of Points per segment: ",AvgPoints
 
1749                 for segment 
in Shorelines
: 
1750                     Lines
.append(segment
[0]) 
1751                     for point 
in segment
[1:-1]: 
1754                     Lines
.append(segment
[-1]) 
1760 #--------------------------------------------------------------------------- 
1762 if __name__ 
== "__main__": 
1764     # running stand alone, Use wxversion: 
1766 #    wxversion.select("2.6") 
1767 #    wxversion.select("2.8") 
1773     optlist
, args 
= getopt
.getopt(sys
.argv
[1:],'l',["all", 
1790         raise ImportError(errorText
) 
1791     StartUpDemo 
= "all" # the default 
1793         StartUpDemo 
= optlist
[0][0][2:] 
1796     class DemoApp(wx
.App
): 
1800         Under the Draw menu, there are three options: 
1802         *Draw Test: will put up a picture of a bunch of randomly generated 
1803         objects, of each kind supported. 
1805         *Draw Map: will draw a map of the world. Be patient, it is a big map, 
1806         with a lot of data, and will take a while to load and draw (about 10 sec  
1807         on my 450Mhz PIII). Redraws take about 2 sec. This demonstrates how the 
1808         performance is not very good for large drawings. 
1810         *Clear: Clears the Canvas. 
1812         Once you have a picture drawn, you can zoom in and out and move about 
1813         the picture. There is a tool bar with three tools that can be 
1816         The magnifying glass with the plus is the zoom in tool. Once selected, 
1817         if you click the image, it will zoom in, centered on where you 
1818         clicked. If you click and drag the mouse, you will get a rubber band 
1819         box, and the image will zoom to fit that box when you release it. 
1821         The magnifying glass with the minus is the zoom out tool. Once selected, 
1822         if you click the image, it will zoom out, centered on where you 
1823         clicked. (note that this takes a while when you are looking at the map, 
1824         as it has a LOT of lines to be drawn. The image is double buffered, so 
1825         you don't see the drawing in progress) 
1827         The hand is the move tool. Once selected, if you click and drag on the 
1828         image, it will move so that the part you clicked on ends up where you 
1829         release the mouse. Nothing is changed while you are dragging. The 
1830         drawing is too slow for that. 
1832         I'd like the cursor to change as you change tools, but the stock 
1833         wxCursors didn't include anything I liked, so I stuck with the 
1834         pointer. Please let me know if you have any nice cursor images for me to 
1838         Any bugs, comments, feedback, questions, and especially code are welcome: 
1842         Chris.Barker@noaa.gov 
1846         def __init__(self
, *args
, **kwargs
): 
1847             wx
.App
.__init
__(self
, *args
, **kwargs
) 
1850             wx
.InitAllImageHandlers() 
1851             DrawFrame 
= BuildDrawFrame() 
1852             frame 
= DrawFrame(None, -1, "FloatCanvas Demo App",wx
.DefaultPosition
,(700,700)) 
1854             self
.SetTopWindow(frame
) 
1857             ## check to see if the demo is set to start in a particular mode. 
1858             ## fixme: should this be in a dict instead? 
1859             if StartUpDemo 
== "text": 
1861             elif StartUpDemo 
== "stext": 
1862                 frame
.TestScaledText() 
1863             elif StartUpDemo 
== "stextbox": 
1864                 frame
.TestScaledTextBox() 
1865             elif StartUpDemo 
== "bitmap": 
1867             elif StartUpDemo 
== "all": 
1869             elif StartUpDemo 
== "map": 
1871             elif StartUpDemo 
== "hit": 
1873             elif StartUpDemo 
== "hitf": 
1874                 frame
.TestHitTestForeground() 
1875             elif StartUpDemo 
== "animate": 
1876                 frame
.TestAnimation() 
1877             elif StartUpDemo 
== "speed": 
1879             elif StartUpDemo 
== "temp": 
1881             elif StartUpDemo 
== "props": 
1882                 frame
.PropertiesChangeTest() 
1883             elif StartUpDemo 
== "arrow": 
1885             elif StartUpDemo 
== "arrowline": 
1886                 frame
.ArrowLineTest() 
1887             elif StartUpDemo 
== "hide": 
1892     app 
= DemoApp(False)# put in True if you want output to go to it's own window. 
1896     # It's not running stand-alone, set up for wxPython demo. 
1897     # don't  neeed wxversion here. 
1900         ## TestPanel and runTest used for integration into wxPython Demo 
1901         class TestPanel(wx
.Panel
): 
1902             def __init__(self
, parent
, log
): 
1904                 wx
.Panel
.__init
__(self
, parent
, -1) 
1906                 from wx
.lib
.floatcanvas
.ScreenShot 
import getScreenShotBitmap
 
1908                 note1 
= wx
.StaticText(self
, -1, errorText
) 
1909                 note2 
= wx
.StaticText(self
, -1, "This is what the FloatCanvas can look like:") 
1910                 S 
= wx
.BoxSizer(wx
.VERTICAL
) 
1912                 S
.Add(note1
, 0, wx
.ALIGN_CENTER
) 
1913                 S
.Add(note2
, 0, wx
.ALIGN_CENTER | wx
.BOTTOM
, 4) 
1914                 S
.Add(wx
.StaticBitmap(self
,-1,getScreenShotBitmap()),0,wx
.ALIGN_CENTER
) 
1920         ## TestPanel and runTest used for integration into wxPython Demo 
1921         class TestPanel(wx
.Panel
): 
1922             def __init__(self
, parent
, log
): 
1924                 wx
.Panel
.__init
__(self
, parent
, -1) 
1925                 note1 
= wx
.StaticText(self
, -1, "The FloatCanvas Demo needs") 
1926                 note2 
= wx
.StaticText(self
, -1, "a separate frame") 
1927                 b 
= wx
.Button(self
, -1, "Open Demo Frame Now") 
1928                 b
.Bind(wx
.EVT_BUTTON
, self
.OnButton
) 
1930                 S 
= wx
.BoxSizer(wx
.VERTICAL
) 
1932                 S
.Add(note1
, 0, wx
.ALIGN_CENTER
) 
1933                 S
.Add(note2
, 0, wx
.ALIGN_CENTER | wx
.BOTTOM
, 5) 
1934                 S
.Add(b
, 0, wx
.ALIGN_CENTER | wx
.ALL
, 5) 
1939             def OnButton(self
, evt
): 
1940                 DrawFrame 
= BuildDrawFrame() 
1941                 frame 
= DrawFrame(None, -1, "FloatCanvas Drawing Window",wx
.DefaultPosition
,(500,500)) 
1943                 #win = wx.lib.plot.TestFrame(self, -1, "PlotCanvas Demo") 
1947     def runTest(frame
, nb
, log
): 
1948         win 
= TestPanel(nb
, log
) 
1951     # import to get the doc 
1952     from wx
.lib 
import floatcanvas
 
1953     overview 
= floatcanvas
.__doc
__