Advertisement
Bkmz

Untitled

Sep 25th, 2011
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.66 KB | None | 0 0
  1. #!/usr/bin/env python2
  2. # -*- coding: utf-8 -*-
  3.  
  4. from Tkinter import Tk, Canvas
  5. from math import cos, sin, sqrt, radians
  6. from time import sleep
  7.  
  8.  
  9. class App:
  10.     def __init__(self, master):
  11.        
  12.         self.master = master
  13.        
  14.         self.width  = {"start": 0, "end": 640}
  15.         self.height = {"start": 0, "end": 480}
  16.        
  17.         self.canvas = Canvas(master)
  18.        
  19.         self.canvas.configure({"bg": "white"})
  20.         self.canvas.pack({"fill": "both", "expand": True})
  21.        
  22.         # widget sizes
  23.         w = self.width['end']
  24.         h = self.height['end']
  25.        
  26.         # define section =) #define Yes 1 #define No 0 ;-)
  27.         self.offset = 70
  28.         self.center = {"x": 0+self.offset, "y": h/2}
  29.        
  30.         self.radius      = 50
  31.         self.line_length = 23
  32.        
  33.        
  34.        
  35.         self.truck = [
  36.                  (-self.line_length,-self.radius),
  37.                  (+self.line_length,-self.radius),
  38.                  
  39.                  (+self.radius,-self.line_length),
  40.                  (+self.radius,+self.line_length),
  41.                  
  42.                  (+self.line_length,+self.radius),
  43.                  (-self.line_length,+self.radius),
  44.                  
  45.                  (-self.radius,+self.line_length),
  46.                  (-self.radius,-self.line_length),
  47.                  
  48.                  # double this point to close circuit
  49.                  (-self.line_length,-self.radius)
  50.                  
  51.                 ]
  52.        
  53.        
  54.         # Tk bindings
  55.         self.__bindings(master)
  56.        
  57.        
  58.         # need first run to redraw
  59.         self.__draw()
  60. #        self.__draw_loop()
  61.        
  62.        
  63.        
  64.        
  65.     """SLOT to update when window is resizing"""    
  66.     def __update_coords(self, event):
  67.         # bind event, to update coordinates
  68.         self.width['end']  = event.width
  69.         self.height['end'] = event.height
  70.        
  71. #        self.canvas.update_idletasks()
  72.        
  73.         self.__draw()
  74.        
  75.        
  76.     def __draw(self, event=None):
  77.         self.canvas.delete("all")
  78.         # widget sizes
  79.         w = self.width['end']
  80.         h = self.height['end']
  81.        
  82.         truck = self.truck
  83.         radius = self.radius
  84.         line_length = self.line_length
  85.         center = self.center
  86.         offset = self.offset
  87.        
  88.         for i in xrange(len(truck)):
  89.             # check the last item
  90.             try:
  91.                 self.canvas.create_line(center['x']+truck[i][0], center['y']+truck[i][1],
  92.                                         center['x']+truck[i+1][0], center['y']+truck[i+1][1],
  93.                                         tag="border")
  94.                
  95.                 self.canvas.create_line(center['x'], center['y'],
  96.                                         center['x']+truck[i][0], center['y']+truck[i][1],
  97.                                         tag="diagonal")
  98.             except:
  99.                 pass
  100.        
  101.                
  102.         # draw dash line.
  103.         self.canvas.create_line(
  104.                                 0+offset, h/2,
  105.                                 w-offset, h/2,
  106.                                 tags="line",
  107.                                 fill="blue",
  108.                                 width="2.0",
  109.                                 dash="5",
  110.                                 )
  111.        
  112.        
  113.     def __rotate_truck(self):
  114.         degree = 10
  115.         for i in xrange(len(self.truck)):
  116.             self.truck[i] = self.__matrix_multiplication(self.truck[i], radians(degree))
  117.            
  118.            
  119.  
  120.    
  121.     def __draw_loop(self, event=None):
  122. #        sleep(5.50)
  123.         print "Run loop"
  124.         self.canvas.delete("all || !line")
  125.        
  126.         self.__rotate_truck()
  127.        
  128.         self.__draw()
  129.        
  130.        
  131.        
  132.  
  133.        
  134.        
  135.        
  136.        
  137.        
  138.        
  139.     def __bindings(self, master):
  140.         # binding master window resize
  141. #        master.bind("<Configure>", self.__update_coords)
  142. #        master.bind("<Configure>", self.__draw)
  143.         master.bind("<Button-1>", self.__draw_loop)
  144.    
  145.     def __matrix_multiplication(self, point, degree):
  146.         a11 = point[0]
  147.         a12 = point[1]
  148.         a13 = 1
  149.        
  150.         b11 = cos(degree)
  151.         b12 = sin(degree)
  152.         b13 = 0
  153.        
  154.         b21 = -sin(degree)
  155.         b22 = cos(degree)
  156.         b23 = 0
  157.        
  158.         b31 = 0
  159.         b32 = 0
  160.         b33 = 1
  161.        
  162.         return a11*b11+a12*b21+a13*b31 ,  a11*b12+a12*b22+a13*b32  
  163.        
  164.  
  165. root = Tk()
  166. root.title("MachineGraphics. Lab2. Variant 2")
  167. root.geometry("640x480-0+100")
  168.  
  169. app = App(root)
  170.  
  171. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement