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