]>
Commit | Line | Data |
---|---|---|
42463de2 RD |
1 | """ |
2 | This is the floatcanvas package. It provides two primary modules, and a | |
3 | support module. | |
4 | ||
2a0495c9 | 5 | FloatCanvas.py contains the main FloatCanvas class, and its supporting |
42463de2 RD |
6 | classes. NavCanvas.py contains a wrapper for the FloatCanvas that |
7 | provides the canvas and a toolbar with tools that allow you to navigate | |
8 | the canvas (zooming, panning, etc.) Resources.py is a module that | |
9 | contains a few resources required by the FloatCanvas (icons, etc) | |
10 | ||
11 | The FloatCanvas is a high level window for drawing maps and anything | |
12 | else in an arbitrary coordinate system. | |
13 | ||
14 | The goal is to provide a convenient way to draw stuff on the screen | |
15 | without having to deal with handling OnPaint events, converting to pixel | |
16 | coordinates, knowing about wxWindows brushes, pens, and colors, etc. It | |
17 | also provides virtually unlimited zooming and scrolling | |
18 | ||
19 | I am using it for two things: | |
20 | 1) general purpose drawing in floating point coordinates | |
21 | 2) displaying map data in Lat-long coordinates | |
22 | ||
23 | If the projection is set to None, it will draw in general purpose | |
24 | floating point coordinates. If the projection is set to 'FlatEarth', it | |
25 | will draw a FlatEarth projection, centered on the part of the map that | |
26 | you are viewing. You can also pass in your own projection function. | |
27 | ||
28 | It is double buffered, so re-draws after the window is uncovered by | |
29 | something else are very quick. | |
30 | ||
31 | It relies on NumPy, which is needed for speed (maybe, I haven't profiled | |
0b0849b5 | 32 | properly) and convenience. |
42463de2 RD |
33 | |
34 | Bugs and Limitations: Lots: patches, fixes welcome | |
35 | ||
36 | For Map drawing: It ignores the fact that the world is, in fact, a | |
37 | sphere, so it will do strange things if you are looking at stuff near | |
38 | the poles or the date line. so far I don't have a need to do that, so I | |
39 | havn't bothered to add any checks for that yet. | |
40 | ||
41 | Zooming: I have set no zoom limits. What this means is that if you zoom | |
42 | in really far, you can get integer overflows, and get weird results. It | |
43 | doesn't seem to actually cause any problems other than weird output, at | |
44 | least when I have run it. | |
45 | ||
46 | Speed: I have done a couple of things to improve speed in this app. The | |
47 | one thing I have done is used NumPy Arrays to store the coordinates of | |
48 | the points of the objects. This allowed me to use array oriented | |
49 | functions when doing transformations, and should provide some speed | |
50 | improvement for objects with a lot of points (big polygons, polylines, | |
51 | pointsets). | |
52 | ||
53 | The real slowdown comes when you have to draw a lot of objects, because | |
54 | you have to call the wx.DC.DrawSomething call each time. This is plenty | |
55 | fast for tens of objects, OK for hundreds of objects, but pretty darn | |
56 | slow for thousands of objects. | |
57 | ||
58 | If you are zoomed in, it checks the Bounding box of an object before | |
59 | drawing it. This makes it a great deal faster when there are a lot of | |
60 | objects and you are zoomed in so that only a few are shown. | |
61 | ||
42463de2 RD |
62 | Mouse Events: |
63 | ||
095315e2 RD |
64 | There are a full set of custom mouse events. They are just like the |
65 | regular mouse events, but include an extra attribute: Event.GetCoords(), | |
66 | that returns the (x,y) position in world coordinates, as a length-2 | |
67 | NumPy vector of Floats. | |
42463de2 | 68 | |
2a0495c9 | 69 | There are also a full set of bindings to mouse events on objects, so |
095315e2 | 70 | that you can specify a given function be called when an object is |
2a0495c9 RD |
71 | clicked, mouse-over'd, etc. |
72 | ||
42463de2 RD |
73 | See the Demo for what it can do, and how to use it. |
74 | ||
75 | Copyright: Christopher Barker | |
42463de2 RD |
76 | License: Same as the version of wxPython you are using it with. |
77 | ||
0b0849b5 RD |
78 | TRAC site for some docs and updates: |
79 | http://morticia.cs.dal.ca/FloatCanvas/ | |
42463de2 | 80 | |
0b0849b5 RD |
81 | SVN for latest code: |
82 | svn://morticia.cs.dal.ca/FloatCanvas | |
42463de2 | 83 | |
0b0849b5 RD |
84 | Mailing List: |
85 | http://mail.mithis.com/cgi-bin/mailman/listinfo/floatcanvas | |
86 | ||
87 | Check for updates or answers to questions, send me an email. | |
88 | Please let me know if you're using this!!! | |
42463de2 RD |
89 | Contact me at: |
90 | ||
91 | Chris.Barker@noaa.gov | |
92 | ||
93 | """ | |
94 | ||
0b0849b5 | 95 | __version__ = "0.9.18" |
42463de2 RD |
96 | |
97 |