Exemplo n.º 1
0
 def on_touch_move(self, touch):
     if self.x == 0 or self.y == 0 or [0, 0] in self.coord:
         self.x, self.y = touch.x, touch.y #sets the start point of line
     if self.ui.btnc.state == 'down':
         self.refresh_screen()
         eraser = Drawable(Rectangle, size = self.zoom, pos=(touch.x, touch.y), color = (1, 1, 1, 0.5))
         eraser.snap(list(eraser.item.pos), self.zoom, self.lat, self.longit)
         eraser.draw(self.canvas)
         check_erase(eraser, self.lines, self.zoom, self.lat, self.longit)
     if self.ui.btnline.state == 'down' or self.ui.btndraw.state == 'down' and touch.y < height-height/12:
         if not self.coord:
             self.coord = [[touch.x, touch.y]] #used as a start point if finger just entered screen
         self.refresh_screen()
         self.canvas.add(Color(*self.color))
         coord_temp = [[self.x, self.y], [touch.x, touch.y]]
         if self.straight_type == 'single' and self.ui.btnline.state == 'down':
             coord_temp[0] = self.coord[0]
             line = Drawable(Line, color = self.color, points = (coord_temp[0][0], coord_temp[0][1], coord_temp[1][0], coord_temp[1][1]), width = 1)
             line.snap(coord_temp, self.zoom, self.lat, self.longit)
             line.draw(self.canvas)
         elif self.ui.btnline.state == 'down':
             if self.x == 0 or self.y == 0 or [0, 0] in self.coord:
                 self.x, self.y = touch.x, touch.y #sets the start point of line
                 return
             line = Drawable(Line, color = self.color, points = (coord_temp[0][0], coord_temp[0][1], coord_temp[1][0], coord_temp[1][1]), width = 2)
             if not line.snap(coord_temp, self.zoom, self.lat, self.longit):
                 return
             if not line in self.lines:
                 self.lines.append(line)
         if self.ui.btndraw.state == 'down' and self.polyline != None:
             self.polyline.add_line(coord_temp[0][0], coord_temp[0][1], coord_temp[1][0], coord_temp[1][1])
             self.drawn_lines.append([Line(points = (coord_temp[0][0], coord_temp[0][1], coord_temp[1][0], coord_temp[1][1])), self.color])
         self.x, self.y = touch.x, touch.y #updates points
          
     if self.ui.btnm.state == 'down':
         if touch.x > width - height/12 or touch.y > height-height/12:
             return
         movex = touch.x - self.old_x
         movey = touch.y - self.old_y
         for line in self.lines:
             line.move(movex, movey)
         for line in range(len(self.drawn_lines)):
             points = (self.drawn_lines[line][0].points[0] + movex, self.drawn_lines[line][0].points[1] + movey, self.drawn_lines[line][0].points[2] + movex, self.drawn_lines[line][0].points[3] + movey)
             self.drawn_lines[line][0] = Line(points = points, width = 1)
         for line in range(len(self.lat)):
             self.lat[line] += movex
         for line in range(len(self.longit)):
             self.longit[line] += movey
         self.refresh_screen()
         self.old_x, self.old_y = touch.x, touch.y
         
         # ensures that their are always grid lines on the screen
         while min(*self.lat) < 0:
             self.lat[self.lat.index(min(*self.lat))] = max(*self.lat) + self.zoom[0]
         while max(*self.lat) > width:
             self.lat[self.lat.index(max(*self.lat))] = min(*self.lat) - self.zoom[0]
         while min(*self.longit) < 0:
             self.longit[self.longit.index(min(*self.longit))] = max(*self.longit) + self.zoom[0]
         while max(*self.longit) > height:
             self.longit[self.longit.index(max(*self.longit))] = min(*self.longit) - self.zoom[0]
Exemplo n.º 2
0
    def on_touch_down(self, touch): #defines the starting point of a new line
        if self.ui.btnc.state == 'down':
            eraser = Drawable(Rectangle, size = self.zoom, pos=(touch.x, touch.y), color = (1, 1, 1, 0.5))
            eraser.snap(list(eraser.item.pos), self.zoom, self.lat, self.longit)
            eraser.draw(self.canvas)
            check_erase(eraser, self.lines, self.zoom, self.lat, self.longit)
            self.refresh_screen()
        if self.ui.btnline.state == 'down':
            self.coord = [[touch.x, touch.y]]

        if self.ui.btndraw.state == 'down':
            self.polyline = Polyline(self.color)
        else: self.coord = []
        self.old_x, self.old_y = touch.x, touch.y