annotate flax/tracker @ 116:9ddea0c614ee

much prettier stdout, including a clock (so you can tell the server's running) much prettier stdout, including a clock (so you can tell the server's running) and channel updates only when the levels change, and throttled to every 100 updates even then.
author drewp
date Fri, 13 Jun 2003 06:15:28 +0000
parents 45b12307c695
children 1e4814221a64
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 #!/usr/bin/python
45b12307c695 Initial revision
drewp
parents:
diff changeset
2 from __future__ import division,nested_scopes
45b12307c695 Initial revision
drewp
parents:
diff changeset
3
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 import sys
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 sys.path.append("../../editor/pour")
45b12307c695 Initial revision
drewp
parents:
diff changeset
6 sys.path.append("../light8")
45b12307c695 Initial revision
drewp
parents:
diff changeset
7
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 from Submaster import Submaster
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 from skim.zooming import Zooming,Pair
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 from math import sqrt,sin,cos
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 from pygame.rect import Rect
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 from xmlnodebase import xmlnodeclass,collectiveelement,xmldocfile
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 from dispatch import dispatcher
45b12307c695 Initial revision
drewp
parents:
diff changeset
14
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 import dmxclient
45b12307c695 Initial revision
drewp
parents:
diff changeset
16
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 import Tkinter as tk
45b12307c695 Initial revision
drewp
parents:
diff changeset
18
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 defaultfont="arial 8"
45b12307c695 Initial revision
drewp
parents:
diff changeset
20
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 def pairdist(pair1,pair2):
45b12307c695 Initial revision
drewp
parents:
diff changeset
22 return pair1.dist(pair2)
45b12307c695 Initial revision
drewp
parents:
diff changeset
23
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 def canvashighlighter(canvas,obj,attribute,normalval,highlightval):
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 """creates bindings on a canvas obj that make attribute go
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 from normal to highlight when the mouse is over the obj"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 canvas.tag_bind(obj,"<Enter>",
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 lambda ev: canvas.itemconfig(obj,**{attribute:highlightval}))
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 canvas.tag_bind(obj,"<Leave>",
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 lambda ev: canvas.itemconfig(obj,**{attribute:normalval}))
45b12307c695 Initial revision
drewp
parents:
diff changeset
31
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 class Field(xmlnodeclass):
45b12307c695 Initial revision
drewp
parents:
diff changeset
33
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 """one light has a field of influence. for any point on the
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 canvas, you can ask this field how strong it is. """
45b12307c695 Initial revision
drewp
parents:
diff changeset
36
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 def name(self,newval=None):
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 """light/sub name"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 return self._getorsetattr("name",newval)
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 def center(self,x=None,y=None):
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 """x,y float coords for the center of this light in the field. returns
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 a Pair, although it accepts x,y"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 return Pair(self._getorsettypedattr("x",float,x),
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 self._getorsettypedattr("y",float,y))
45b12307c695 Initial revision
drewp
parents:
diff changeset
45
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 def falloff(self,dist=None):
45b12307c695 Initial revision
drewp
parents:
diff changeset
47
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 """linear falloff from 1 at center, to 0 at dist pixels away
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 from center"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 return self._getorsettypedattr("falloff",float,dist)
45b12307c695 Initial revision
drewp
parents:
diff changeset
51
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 def getdistforintensity(self,intens):
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 """returns the distance you'd have to be for the given intensity (0..1)"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 return (1-intens)*self.falloff()
45b12307c695 Initial revision
drewp
parents:
diff changeset
55
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 def calc(self,x,y):
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 """returns field strength at point x,y"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 dist=pairdist(Pair(x,y),self.center())
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 return max(0,(self.falloff()-dist)/self.falloff())
45b12307c695 Initial revision
drewp
parents:
diff changeset
60
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 class Fieldset(collectiveelement):
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 """group of fields. persistent."""
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 def childtype(self): return Field
45b12307c695 Initial revision
drewp
parents:
diff changeset
64
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 def version(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 """read-only version attribute on fieldset tag"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 return self._getorsetattr("version",None)
45b12307c695 Initial revision
drewp
parents:
diff changeset
68
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 def report(self,x,y):
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 """reports active fields and their intensities"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 active=0
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 for f in self.getall():
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 name=f.name()
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 intens=f.calc(x,y)
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 if intens>0:
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 print name,intens,
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 active+=1
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 if active>0:
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 print
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 self.dmxsend(x,y)
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 def dmxsend(self,x,y):
45b12307c695 Initial revision
drewp
parents:
diff changeset
82 """output lights to dmx"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 levels=dict([(f.name(),f.calc(x,y)) for f in self.getall()])
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 dmxlist=Submaster(None,levels).get_dmx_list()
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 dmxclient.outputlevels(dmxlist)
45b12307c695 Initial revision
drewp
parents:
diff changeset
86
45b12307c695 Initial revision
drewp
parents:
diff changeset
87
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 def getbounds(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 """returns xmin,xmax,ymin,ymax for the non-zero areas of this field"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 r=None
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 for f in self.getall():
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 rad=f.getdistforintensity(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 fx,fy=f.center()
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 fieldrect=Rect(fx-rad,fy-rad,rad*2,rad*2)
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 if r is None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 r=fieldrect
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 r=r.union(fieldrect)
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 return r.left,r.right,r.top,r.bottom
45b12307c695 Initial revision
drewp
parents:
diff changeset
100
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 class Fieldsetfile(xmldocfile):
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 def __init__(self,filename):
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 self._openornew(filename,topleveltype=Fieldset)
45b12307c695 Initial revision
drewp
parents:
diff changeset
104 def fieldset(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
105 return self._gettoplevel()
45b12307c695 Initial revision
drewp
parents:
diff changeset
106
45b12307c695 Initial revision
drewp
parents:
diff changeset
107 ########################################################################
45b12307c695 Initial revision
drewp
parents:
diff changeset
108 ########################################################################
45b12307c695 Initial revision
drewp
parents:
diff changeset
109
45b12307c695 Initial revision
drewp
parents:
diff changeset
110 class FieldDisplay:
45b12307c695 Initial revision
drewp
parents:
diff changeset
111 """the view for a Field."""
45b12307c695 Initial revision
drewp
parents:
diff changeset
112 def __init__(self,canvas,field):
45b12307c695 Initial revision
drewp
parents:
diff changeset
113 self.canvas=canvas
45b12307c695 Initial revision
drewp
parents:
diff changeset
114 self.field=field
45b12307c695 Initial revision
drewp
parents:
diff changeset
115 self.tags=[str(id(self))] # canvas tag to id our objects
45b12307c695 Initial revision
drewp
parents:
diff changeset
116
45b12307c695 Initial revision
drewp
parents:
diff changeset
117 def setcoords(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
118 """adjust canvas obj coords to match the field"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
119 # this uses the canvas object ids saved by makeobjs
45b12307c695 Initial revision
drewp
parents:
diff changeset
120 f=self.field
45b12307c695 Initial revision
drewp
parents:
diff changeset
121 c=self.canvas
45b12307c695 Initial revision
drewp
parents:
diff changeset
122 w2c=self.canvas.world2canvas
45b12307c695 Initial revision
drewp
parents:
diff changeset
123
45b12307c695 Initial revision
drewp
parents:
diff changeset
124 # rings
45b12307c695 Initial revision
drewp
parents:
diff changeset
125 for intens,ring in self.rings.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
126 rad=f.getdistforintensity(intens)
45b12307c695 Initial revision
drewp
parents:
diff changeset
127 p1=w2c(*(f.center()-Pair(rad,rad)))
45b12307c695 Initial revision
drewp
parents:
diff changeset
128 p2=w2c(*(f.center()+Pair(rad,rad)))
45b12307c695 Initial revision
drewp
parents:
diff changeset
129 c.coords(ring,p1[0],p1[1],p2[0],p2[1])
45b12307c695 Initial revision
drewp
parents:
diff changeset
130
45b12307c695 Initial revision
drewp
parents:
diff changeset
131 # text
45b12307c695 Initial revision
drewp
parents:
diff changeset
132 p1=w2c(*f.center())
45b12307c695 Initial revision
drewp
parents:
diff changeset
133 c.coords(self.txt,*p1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
134
45b12307c695 Initial revision
drewp
parents:
diff changeset
135 def makeobjs(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
136 """(re)create the canvas objs (null coords) and make their bindings"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
137 c=self.canvas
45b12307c695 Initial revision
drewp
parents:
diff changeset
138 f=self.field
45b12307c695 Initial revision
drewp
parents:
diff changeset
139 c.delete(self.tags)
45b12307c695 Initial revision
drewp
parents:
diff changeset
140
45b12307c695 Initial revision
drewp
parents:
diff changeset
141 w2c=self.canvas.world2canvas
45b12307c695 Initial revision
drewp
parents:
diff changeset
142
45b12307c695 Initial revision
drewp
parents:
diff changeset
143 # make rings
45b12307c695 Initial revision
drewp
parents:
diff changeset
144 self.rings={} # rad,canvasobj
45b12307c695 Initial revision
drewp
parents:
diff changeset
145 for intens,color in (#(1,'white'),
45b12307c695 Initial revision
drewp
parents:
diff changeset
146 (.8,'gray90'),(.6,'gray80'),(.4,'gray60'),(.2,'gray50'),
45b12307c695 Initial revision
drewp
parents:
diff changeset
147 (0,'#000080')):
45b12307c695 Initial revision
drewp
parents:
diff changeset
148 self.rings[intens]=c.create_oval(0,0,0,0,
45b12307c695 Initial revision
drewp
parents:
diff changeset
149 outline=color,width=2,tags=self.tags,
45b12307c695 Initial revision
drewp
parents:
diff changeset
150 outlinestipple='gray50')
45b12307c695 Initial revision
drewp
parents:
diff changeset
151
45b12307c695 Initial revision
drewp
parents:
diff changeset
152 # make text
45b12307c695 Initial revision
drewp
parents:
diff changeset
153 self.txt=c.create_text(0,0,text=f.name(),font=defaultfont+" bold",
45b12307c695 Initial revision
drewp
parents:
diff changeset
154 fill='white',anchor='c',
45b12307c695 Initial revision
drewp
parents:
diff changeset
155 tags=self.tags)
45b12307c695 Initial revision
drewp
parents:
diff changeset
156
45b12307c695 Initial revision
drewp
parents:
diff changeset
157 # highlight text bindings
45b12307c695 Initial revision
drewp
parents:
diff changeset
158 canvashighlighter(c,self.txt,'fill',normalval='white',highlightval='red')
45b12307c695 Initial revision
drewp
parents:
diff changeset
159
45b12307c695 Initial revision
drewp
parents:
diff changeset
160 # position drag bindings
45b12307c695 Initial revision
drewp
parents:
diff changeset
161 def press(ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
162 self._lastmouse=ev.x,ev.y
45b12307c695 Initial revision
drewp
parents:
diff changeset
163 def motion(ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
164 dcan=Pair(*[a-b for a,b in zip((ev.x,ev.y),self._lastmouse)])
45b12307c695 Initial revision
drewp
parents:
diff changeset
165 dworld=c.canvas2world_vector(*dcan)
45b12307c695 Initial revision
drewp
parents:
diff changeset
166 self.field.center(*(self.field.center()+dworld))
45b12307c695 Initial revision
drewp
parents:
diff changeset
167 self._lastmouse=ev.x,ev.y
45b12307c695 Initial revision
drewp
parents:
diff changeset
168 self.setcoords() # redraw
45b12307c695 Initial revision
drewp
parents:
diff changeset
169 def release(ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
170 if hasattr(self,'_lastmouse'):
45b12307c695 Initial revision
drewp
parents:
diff changeset
171 del self._lastmouse
45b12307c695 Initial revision
drewp
parents:
diff changeset
172 dispatcher.send("field coord changed") # updates bounds
45b12307c695 Initial revision
drewp
parents:
diff changeset
173
45b12307c695 Initial revision
drewp
parents:
diff changeset
174 c.tag_bind(self.txt,"<ButtonPress-1>",press)
45b12307c695 Initial revision
drewp
parents:
diff changeset
175 c.tag_bind(self.txt,"<B1-Motion>",motion)
45b12307c695 Initial revision
drewp
parents:
diff changeset
176 c.tag_bind(self.txt,"<B1-ButtonRelease>",release)
45b12307c695 Initial revision
drewp
parents:
diff changeset
177
45b12307c695 Initial revision
drewp
parents:
diff changeset
178 # radius drag bindings
45b12307c695 Initial revision
drewp
parents:
diff changeset
179 outerring=self.rings[0]
45b12307c695 Initial revision
drewp
parents:
diff changeset
180 canvashighlighter(c,outerring,
45b12307c695 Initial revision
drewp
parents:
diff changeset
181 'outline',normalval='#000080',highlightval='#4040ff')
45b12307c695 Initial revision
drewp
parents:
diff changeset
182 def motion(ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
183 worldmouse=self.canvas.canvas2world(ev.x,ev.y)
45b12307c695 Initial revision
drewp
parents:
diff changeset
184 currentdist=pairdist(worldmouse,self.field.center())
45b12307c695 Initial revision
drewp
parents:
diff changeset
185 self.field.falloff(currentdist)
45b12307c695 Initial revision
drewp
parents:
diff changeset
186 self.setcoords()
45b12307c695 Initial revision
drewp
parents:
diff changeset
187 c.tag_bind(outerring,"<B1-Motion>",motion)
45b12307c695 Initial revision
drewp
parents:
diff changeset
188 c.tag_bind(outerring,"<B1-ButtonRelease>",release) # from above
45b12307c695 Initial revision
drewp
parents:
diff changeset
189
45b12307c695 Initial revision
drewp
parents:
diff changeset
190 self.setcoords()
45b12307c695 Initial revision
drewp
parents:
diff changeset
191
45b12307c695 Initial revision
drewp
parents:
diff changeset
192 class Tracker(tk.Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
193
45b12307c695 Initial revision
drewp
parents:
diff changeset
194 """whole tracker widget, which is mostly a view for a
45b12307c695 Initial revision
drewp
parents:
diff changeset
195 Fieldset. tracker makes its own fieldset"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
196
45b12307c695 Initial revision
drewp
parents:
diff changeset
197 # world coords of the visible canvas (preserved even in window resizes)
45b12307c695 Initial revision
drewp
parents:
diff changeset
198 xmin=0
45b12307c695 Initial revision
drewp
parents:
diff changeset
199 xmax=100
45b12307c695 Initial revision
drewp
parents:
diff changeset
200 ymin=0
45b12307c695 Initial revision
drewp
parents:
diff changeset
201 ymax=100
45b12307c695 Initial revision
drewp
parents:
diff changeset
202
45b12307c695 Initial revision
drewp
parents:
diff changeset
203 fieldsetfile=None
45b12307c695 Initial revision
drewp
parents:
diff changeset
204 displays=None # Field : FieldDisplay. we keep these in sync with the fieldset
45b12307c695 Initial revision
drewp
parents:
diff changeset
205
45b12307c695 Initial revision
drewp
parents:
diff changeset
206 def __init__(self,master):
45b12307c695 Initial revision
drewp
parents:
diff changeset
207 tk.Frame.__init__(self,master)
45b12307c695 Initial revision
drewp
parents:
diff changeset
208
45b12307c695 Initial revision
drewp
parents:
diff changeset
209 self.displays={}
45b12307c695 Initial revision
drewp
parents:
diff changeset
210
45b12307c695 Initial revision
drewp
parents:
diff changeset
211 c=self.canvas=Zooming(self,bg='black',closeenough=5)
45b12307c695 Initial revision
drewp
parents:
diff changeset
212 c.pack(fill='both',exp=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
213
45b12307c695 Initial revision
drewp
parents:
diff changeset
214 # preserve edge coords over window resize
45b12307c695 Initial revision
drewp
parents:
diff changeset
215 c.bind("<Configure>",self.configcoords)
45b12307c695 Initial revision
drewp
parents:
diff changeset
216
45b12307c695 Initial revision
drewp
parents:
diff changeset
217 c.bind("<Motion>",
45b12307c695 Initial revision
drewp
parents:
diff changeset
218 lambda ev: self._fieldset().report(*c.canvas2world(ev.x,ev.y)))
45b12307c695 Initial revision
drewp
parents:
diff changeset
219 def save(ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
220 print "saving"
45b12307c695 Initial revision
drewp
parents:
diff changeset
221 self.fieldsetfile.save()
45b12307c695 Initial revision
drewp
parents:
diff changeset
222 master.bind("<Key-s>",save)
45b12307c695 Initial revision
drewp
parents:
diff changeset
223 dispatcher.connect(self.autobounds,"field coord changed")
45b12307c695 Initial revision
drewp
parents:
diff changeset
224
45b12307c695 Initial revision
drewp
parents:
diff changeset
225 def _fieldset(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
226 return self.fieldsetfile.fieldset()
45b12307c695 Initial revision
drewp
parents:
diff changeset
227
45b12307c695 Initial revision
drewp
parents:
diff changeset
228 def load(self,filename):
45b12307c695 Initial revision
drewp
parents:
diff changeset
229 self.fieldsetfile=Fieldsetfile(filename)
45b12307c695 Initial revision
drewp
parents:
diff changeset
230 self.displays.clear()
45b12307c695 Initial revision
drewp
parents:
diff changeset
231 for f in self.fieldsetfile.fieldset().getall():
45b12307c695 Initial revision
drewp
parents:
diff changeset
232 self.displays[f]=FieldDisplay(self.canvas,f)
45b12307c695 Initial revision
drewp
parents:
diff changeset
233 self.displays[f].makeobjs()
45b12307c695 Initial revision
drewp
parents:
diff changeset
234 self.autobounds()
45b12307c695 Initial revision
drewp
parents:
diff changeset
235
45b12307c695 Initial revision
drewp
parents:
diff changeset
236 def configcoords(self,*args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
237 # force our canvas coords to stay at the edges of the window
45b12307c695 Initial revision
drewp
parents:
diff changeset
238 c=self.canvas
45b12307c695 Initial revision
drewp
parents:
diff changeset
239 cornerx,cornery=c.canvas2world(0,0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
240 c.move(cornerx-self.xmin,
45b12307c695 Initial revision
drewp
parents:
diff changeset
241 cornery-self.ymin)
45b12307c695 Initial revision
drewp
parents:
diff changeset
242 c.setscale(0,0,
45b12307c695 Initial revision
drewp
parents:
diff changeset
243 c.winfo_width()/(self.xmax-self.xmin),
45b12307c695 Initial revision
drewp
parents:
diff changeset
244 c.winfo_height()/(self.ymax-self.ymin))
45b12307c695 Initial revision
drewp
parents:
diff changeset
245
45b12307c695 Initial revision
drewp
parents:
diff changeset
246 def autobounds(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
247 """figure out our bounds from the fieldset, and adjust the display zooms.
45b12307c695 Initial revision
drewp
parents:
diff changeset
248 writes the corner coords onto the canvas."""
45b12307c695 Initial revision
drewp
parents:
diff changeset
249 self.xmin,self.xmax,self.ymin,self.ymax=self._fieldset().getbounds()
45b12307c695 Initial revision
drewp
parents:
diff changeset
250
45b12307c695 Initial revision
drewp
parents:
diff changeset
251 self.configcoords()
45b12307c695 Initial revision
drewp
parents:
diff changeset
252
45b12307c695 Initial revision
drewp
parents:
diff changeset
253 c=self.canvas
45b12307c695 Initial revision
drewp
parents:
diff changeset
254 c.delete('cornercoords')
45b12307c695 Initial revision
drewp
parents:
diff changeset
255 for x,anc2 in ((self.xmin,'w'),(self.xmax,'e')):
45b12307c695 Initial revision
drewp
parents:
diff changeset
256 for y,anc1 in ((self.ymin,'n'),(self.ymax,'s')):
45b12307c695 Initial revision
drewp
parents:
diff changeset
257 pos=c.world2canvas(x,y)
45b12307c695 Initial revision
drewp
parents:
diff changeset
258 c.create_text(pos[0],pos[1],text="%s,%s"%(x,y),
45b12307c695 Initial revision
drewp
parents:
diff changeset
259 fill='white',anchor=anc1+anc2,
45b12307c695 Initial revision
drewp
parents:
diff changeset
260 tags='cornercoords')
45b12307c695 Initial revision
drewp
parents:
diff changeset
261 [d.setcoords() for d in self.displays.values()]
45b12307c695 Initial revision
drewp
parents:
diff changeset
262
45b12307c695 Initial revision
drewp
parents:
diff changeset
263 ########################################################################
45b12307c695 Initial revision
drewp
parents:
diff changeset
264 ########################################################################
45b12307c695 Initial revision
drewp
parents:
diff changeset
265
45b12307c695 Initial revision
drewp
parents:
diff changeset
266 root=tk.Tk()
45b12307c695 Initial revision
drewp
parents:
diff changeset
267 root.wm_geometry('700x350')
45b12307c695 Initial revision
drewp
parents:
diff changeset
268 tra=Tracker(root)
45b12307c695 Initial revision
drewp
parents:
diff changeset
269 tra.pack(fill='both',exp=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
270
45b12307c695 Initial revision
drewp
parents:
diff changeset
271 tra.load("fieldsets/demo")
45b12307c695 Initial revision
drewp
parents:
diff changeset
272
45b12307c695 Initial revision
drewp
parents:
diff changeset
273 root.mainloop()