From d677ec1dafe74b46b611191bc47f8110f849ed44 Mon Sep 17 00:00:00 2001
From: Neil Gershenfeld <gersh@cba.mit.edu>
Date: Sat, 28 Aug 2021 15:00:59 -0400
Subject: [PATCH] vars to vars

---
 Urumbot/Urumbot.py | 93 +++++++++++++++++++++++-----------------------
 1 file changed, 47 insertions(+), 46 deletions(-)

diff --git a/Urumbot/Urumbot.py b/Urumbot/Urumbot.py
index 9960d56..62e3653 100644
--- a/Urumbot/Urumbot.py
+++ b/Urumbot/Urumbot.py
@@ -24,10 +24,6 @@ def StartProcess(vars):
    #
    forward = b'f'
    reverse = b'r'
-   points = []
-   plotsize = 250
-   plotscale = 0
-   xmin = ymin = 0
    tpwm = 20000 # us (50 Hz)
    #
    # open ports
@@ -96,6 +92,13 @@ if __name__ == '__main__':
    # variables class
    #
    class VarsClass:
+      #
+      # local variables
+      #
+      points = []
+      plotsize = 250
+      plotscale = 0
+      xmin = ymin = xmax = ymax = 0
       #
       # shared memory variables
       #
@@ -190,20 +193,19 @@ if __name__ == '__main__':
       time.sleep(float(vars.ServoDelayVar.get()))
    #
    def LoadFile():
-      global points,xmin,ymin,plotscale
       filename = tkinter.filedialog.askopenfile()
       file = open(filename.name,'r')
-      xmin = ymin = 1e10
-      xmax = ymax = -1e10
+      vars.xmin = vars.ymin = 1e10
+      vars.xmax = vars.ymax = -1e10
       digits = ['-','0','1','2','3','4','5','6','7','8','9']
       arg = ''
       num = ''
       cmd = ''
       mode = ''
       point = 0
-      points = []
+      vars.points = []
       x = y = 0
-      Plot.create_rectangle(0,0,plotsize,plotsize,outline='',fill='white')
+      Plot.create_rectangle(0,0,vars.plotsize,vars.plotsize,outline='',fill='white')
       while 1:
          chr = file.read(1)
          if not chr:
@@ -215,13 +217,13 @@ if __name__ == '__main__':
                if (mode == 'PR'):
                   if (point == 0):
                      x += float(num)/40.0
-                     points[-1].append(x)
+                     vars.points[-1].append(x)
                   else:
                      y += float(num)/40.0
-                     points[-1].append(y)
+                     vars.points[-1].append(y)
                   point = 1-point
                else:
-                  points[-1].append(float(num)/40.0)
+                  vars.points[-1].append(float(num)/40.0)
                num = ''
             arg = ''
             cmd = ''
@@ -230,13 +232,13 @@ if __name__ == '__main__':
                if (mode == 'PR'):
                   if (point == 0):
                      x += float(num)/40.0
-                     points[-1].append(x)
+                     vars.points[-1].append(x)
                   else:
                      y += float(num)/40.0
-                     points[-1].append(y)
+                     vars.points[-1].append(y)
                   point = 1-point
                else:
-                  points[-1].append(float(num)/40.0)
+                  vars.points[-1].append(float(num)/40.0)
                num = ''
          else:
             arg += chr
@@ -249,34 +251,34 @@ if __name__ == '__main__':
             elif (arg == 'PU'):
                cmd = 'PU'
                arg = ''
-               points.append(['PU'])
+               vars.points.append(['PU'])
             elif (arg == 'PD'):
                cmd = 'PD'
                arg = ''
-               points.append(['PD'])
+               vars.points.append(['PD'])
             elif ((chr in digits) and ((cmd == 'PU') or (cmd == 'PD'))):
                num += chr
       file.close()
-      for segment in range(len(points)):
-         for point in range(1,len(points[segment]),2):
-            x = points[segment][point]
-            if (x > xmax): xmax = x
-            if (x < xmin): xmin = x
-            y = points[segment][point+1]
-            if (y > ymax): ymax = y
-            if (y < ymin): ymin = y
-      FileLimits.config(text=f"{xmax-xmin:.3f} x {ymax-ymin:.3f}")
-      if ((xmax-xmin) > (ymax-ymin)):
-         plotscale = (plotsize-2)/(xmax-xmin)
+      for segment in range(len(vars.points)):
+         for point in range(1,len(vars.points[segment]),2):
+            x = vars.points[segment][point]
+            if (x > vars.xmax): vars.xmax = x
+            if (x < vars.xmin): vars.xmin = x
+            y = vars.points[segment][point+1]
+            if (y > vars.ymax): vars.ymax = y
+            if (y < vars.ymin): vars.ymin = y
+      FileLimits.config(text=f"{vars.xmax-vars.xmin:.3f} x {vars.ymax-vars.ymin:.3f}")
+      if ((vars.xmax-vars.xmin) > (vars.ymax-vars.ymin)):
+         vars.plotscale = (vars.plotsize-2)/(vars.xmax-vars.xmin)
       else:
-         plotscale = (plotsize-2)/(ymax-ymin)
+         vars.plotscale = (vars.plotsize-2)/(vars.ymax-vars.ymin)
       xold = 0
-      yold = plotsize-1
-      for segment in range(len(points)):
-         type = points[segment][0]
-         for point in range(1,len(points[segment]),2):
-            xnew = 1+plotscale*(points[segment][point]-xmin)
-            ynew = (plotsize-1)-plotscale*(points[segment][point+1]-ymin)
+      yold = vars.plotsize-1
+      for segment in range(len(vars.points)):
+         type = vars.points[segment][0]
+         for point in range(1,len(vars.points[segment]),2):
+            xnew = 1+vars.plotscale*(vars.points[segment][point]-vars.xmin)
+            ynew = (vars.plotsize-1)-vars.plotscale*(vars.points[segment][point+1]-vars.ymin)
             if (type == 'PU'):
                Plot.create_line(xold,yold,xnew,ynew,width=1,fill="#FF0000")
             else:
@@ -285,30 +287,29 @@ if __name__ == '__main__':
             yold = ynew
    #
    def DrawFile():
-      global points,xmin,ymin
       r0 = float(vars.R0Var.get())
       r1 = float(vars.R1Var.get())
       x0,y0 = PolarToCartesian(r0,r1)
       xold = 0
-      yold = plotsize-1
-      Plot.create_rectangle(0,0,plotsize,plotsize,outline='',fill='white')
-      for segment in range(len(points)):
-         type = points[segment][0]
+      yold = vars.plotsize-1
+      Plot.create_rectangle(0,0,vars.plotsize,vars.plotsize,outline='',fill='white')
+      for segment in range(len(vars.points)):
+         type = vars.points[segment][0]
          if (type == 'PU'):
             PenUp()
          else:
             PenDown()
-         for point in range(1,len(points[segment]),2):
-            xnew = 1+plotscale*(points[segment][point]-xmin)
-            ynew = (plotsize-1)-plotscale*(points[segment][point+1]-ymin)
+         for point in range(1,len(vars.points[segment]),2):
+            xnew = 1+vars.plotscale*(vars.points[segment][point]-vars.xmin)
+            ynew = (vars.plotsize-1)-vars.plotscale*(vars.points[segment][point+1]-vars.ymin)
             if (type == 'PU'):
                Plot.create_line(xold,yold,xnew,ynew,width=1,fill="#FF0000")
             else:
                Plot.create_line(xold,yold,xnew,ynew,width=1,fill="#000000")
             xold = xnew
             yold = ynew
-            x = x0-points[segment][point]+xmin
-            y = y0-points[segment][point+1]+ymin
+            x = x0-vars.points[segment][point]+vars.xmin
+            y = y0-vars.points[segment][point+1]+vars.ymin
             MoveTo(x,y)
    #
    def MoveTo(xnew,ynew):
@@ -448,7 +449,7 @@ if __name__ == '__main__':
    #
    row += 1
    Label(root,text='origin',bg='white').grid(column=0,row=row,padx=pad,pady=pad,sticky='se')
-   Plot = Canvas(root,width=plotsize,height=plotsize,background='white')
+   Plot = Canvas(root,width=vars.plotsize,height=vars.plotsize,background='white')
    Plot.grid(column=1,row=row,columnspan=4,padx=pad,pady=pad,sticky='sw')
    #
    # start mainloop
-- 
GitLab