diff --git a/exp/color_sampler.py b/exp/color_sampler.py --- a/exp/color_sampler.py +++ b/exp/color_sampler.py @@ -28,7 +28,8 @@ class Sampler: self.letter="_" self.hsv=(0,0,0) self.pos=(0,0) - self.corners=Corners() + self.m=0 + self._corners=[Corners()] self._dirty=False self._createGUI() @@ -56,7 +57,9 @@ class Sampler: self.canvas.create_image(0,0,image=self.photo,anchor="nw") self.canvas.configure(width=w,height=h) - self.corners=Corners(self.annotations.get(self.filenames[self.k]) or []) + self.m=0 + corners=self.annotations.get(self.filenames[self.k]) or [] + self._corners=[Corners(c) for c in corners+[[]]] self._markCorners() def switchImage(self,step): @@ -65,13 +68,18 @@ class Sampler: self.k=(self.k+step+n)%n self.showImage() + def switchCorners(self,step): + n=len(self._corners) + self.m=(self.m+step+n)%n + self._markCorners() + def setLetter(self,c): self.letter=c self.letterLabel.configure(text="Letter: {0}".format(c)) def addCorner(self,e): self.corners.add(e.x,e.y) - self.annotations[self.filenames[self.k]]=list(self.corners) + self.annotations[self.filenames[self.k]]=[list(corns) for corns in self._corners if len(corns)>0] self._dirty=True self._markCorners() @@ -98,6 +106,8 @@ class Sampler: self.canvas.bind("",self.sample) root.bind("",lambda e: self.switchImage(-1)) root.bind("",lambda e: self.switchImage(1)) + root.bind("",lambda e: self.switchCorners(-1)) + root.bind("",lambda e: self.switchCorners(1)) root.bind("",lambda e: self.setLetter("b")) root.bind("",lambda e: self.setLetter("e")) root.bind("",lambda e: self.setLetter("w")) @@ -117,15 +127,21 @@ class Sampler: def _markCorners(self): self.canvas.delete("mark") - for c in self.corners: - (x,y)=(c.x,c.y) - self.canvas.create_oval(x-2,y-2,x+2,y+2,fill="#00ff00",tags="mark") - if self.corners.is_canon(): - (a,b,c,d)=self.corners - self.canvas.create_line(a.x,a.y,b.x,b.y,fill="#00ff00",tags="mark") - self.canvas.create_line(b.x,b.y,c.x,c.y,fill="#00ff00",tags="mark") - self.canvas.create_line(c.x,c.y,d.x,d.y,fill="#00ff00",tags="mark") - self.canvas.create_line(d.x,d.y,a.x,a.y,fill="#00ff00",tags="mark") + for corns in self._corners: + for c in corns: + (x,y)=(c.x,c.y) + self.canvas.create_oval(x-2,y-2,x+2,y+2,fill="#00ff00",tags="mark") + if corns.is_canon(): + (a,b,c,d)=corns + dash=tuple() if corns is self.corners else (4,4) + self.canvas.create_line(a.x,a.y,b.x,b.y,fill="#00ff00",dash=dash,tags="mark") + self.canvas.create_line(b.x,b.y,c.x,c.y,fill="#00ff00",dash=dash,tags="mark") + self.canvas.create_line(c.x,c.y,d.x,d.y,fill="#00ff00",dash=dash,tags="mark") + self.canvas.create_line(d.x,d.y,a.x,a.y,fill="#00ff00",dash=dash,tags="mark") + + @property + def corners(self): + return self._corners[self.m] class DataFile(MutableMapping):