#!/usr/bin/python3 # =================================================================== # draw a repeated shape (try graphics.py draw polygon method?) # =================================================================== import coordinate_conversion as cc import transformation_matrix as tm import user_interface as ui import draw_xy_axes as ax from graphics import * winw = 801 # window width winh = 801 # window height line_color = ['black','red','green','blue','yellow','cyan'] testpts = [[0,0],[200,10],[220,0],[200,-10],[0,0]] #-------------------------------------------------------------------- # ---- draw shape # ---- win - window object # ---- pts - list of end points to draw conecting lines # ---- angle - shape rotation angle # ---- color - shape line color # ------------------------------------------------------------------- def draw_shape(win,pts,angle=10,color=0): # --- transformation matrix (rotation around orgin) mx = tm.get_z_rotation_matrix_2d(angle) # ---- connect the points with lines for i in range(len(pts)-1): # ---- rotate (transform) line points (start and end) cxy0 = mx @ [pts[i][0],pts[i][1],1] cxy1 = mx @ [pts[i+1][0],pts[i+1][1],1] # ---- convert center (caresian) coordinates to # ---- window coordinates wxy0 = cc.center_to_win_coords(cxy0[0],cxy0[1],winw,winh) wxy1 = cc.center_to_win_coords(cxy1[0],cxy1[1],winw,winh) # ---- draw a line l = Line(Point(wxy0[0],wxy0[1]),Point(wxy1[0],wxy1[1])) l.setWidth(2) l.setOutline(line_color[color]) l.draw(win) # ------------------------------------------------------------------- # ---- main # ------------------------------------------------------------------- # ---- create window win = GraphWin("Repeat Drawing Shape",winw,winh) win.setBackground("white") # ---- draw X,Y coordinate axes ##ax.draw_xy_axes(win,True) # ---- rotate shape then draw color = 0 # color list index angle = 0 # starting angle delta = 15 # angle delta lstlen = len(testpts) # point list length while angle <= 180: # ---- draw shape using a rotation angle (deg) draw_shape(win,testpts,angle,color) angle += delta # next angle if color < lstlen: # next color color += 1 else: color = 0 # ---- end program ui.pause() win.close() print()