Update origin location on Spline GUI

Still plenty of other work that needs to be done on the spline gui, but
at least update things so that (0, 0) is at the center of the field
again.

Change-Id: I5ff552588ab76d83a3c85600089b4558281f36b3
diff --git a/frc971/control_loops/python/drawing_constants.py b/frc971/control_loops/python/drawing_constants.py
index a2ddf5d..332f37e6 100644
--- a/frc971/control_loops/python/drawing_constants.py
+++ b/frc971/control_loops/python/drawing_constants.py
@@ -3,6 +3,7 @@
 from constants import *
 import numpy as np
 
+
 def set_color(cr, color, a=1):
     if color.a == 1.0:
         cr.set_source_rgba(color.r, color.g, color.b, a)
@@ -36,12 +37,14 @@
     cr.stroke()
     set_color(cr, palette["WHITE"])
 
-def draw_circle(cr,  x, y, radius, color=palette["RED"]):
+
+def draw_circle(cr, x, y, radius, color=palette["RED"]):
     set_color(cr, color)
-    cr.arc(x, y, radius, 0, 2*np.pi)
+    cr.arc(x, y, radius, 0, 2 * np.pi)
     cr.fill()
     cr.stroke()
 
+
 def draw_control_points(cr, points, width=10, radius=4, color=palette["BLUE"]):
     for i in range(0, len(points)):
         draw_px_x(cr, points[i][0], points[i][1], width, color)
@@ -50,25 +53,31 @@
         cr.fill()
         set_color(cr, palette["WHITE"])
 
+
 def display_text(cr, text, widtha, heighta, widthb, heightb):
     cr.scale(widtha, -heighta)
     cr.show_text(text)
     cr.scale(widthb, -heightb)
 
+
 def markers(cr):
     SHOW_MARKERS = False
     if SHOW_MARKERS:
         # Shield Generator Reference
         color = palette["BLUE"]
-        yorigin = 0-SCREEN_SIZE/2 # Move origin to bottom left
+        yorigin = 0 - SCREEN_SIZE / 2  # Move origin to bottom left
         # Top Left
-        draw_circle(cr, mToPx(inToM(206.625)), yorigin + mToPx(inToM(212.097), True), 10, color)
+        draw_circle(cr, mToPx(inToM(206.625)),
+                    yorigin + mToPx(inToM(212.097), True), 10, color)
         # Top Right
-        draw_circle(cr, mToPx(inToM(373.616)), yorigin + mToPx(inToM(281.26), True), 10, color)
+        draw_circle(cr, mToPx(inToM(373.616)),
+                    yorigin + mToPx(inToM(281.26), True), 10, color)
         # Bottom Right
-        draw_circle(cr, mToPx(inToM(422.625)), yorigin + mToPx(inToM(124.67), True), 10, color)
+        draw_circle(cr, mToPx(inToM(422.625)),
+                    yorigin + mToPx(inToM(124.67), True), 10, color)
         # Bottom Left
-        draw_circle(cr, mToPx(inToM(255.634)), yorigin + mToPx(inToM(55.5), True), 10, color)
+        draw_circle(cr, mToPx(inToM(255.634)),
+                    yorigin + mToPx(inToM(55.5), True), 10, color)
 
         # Trench Run Reference
         color = palette["GREEN"]
@@ -76,106 +85,101 @@
         # Bottom Right
         draw_circle(cr, mToPx(inToM(206.625)), yorigin, 10, color)
         # Top Right
-        draw_circle(cr, mToPx(inToM(206.625)), yorigin + mToPx(inToM(55.5), True), 10, color)
+        draw_circle(cr, mToPx(inToM(206.625)),
+                    yorigin + mToPx(inToM(55.5), True), 10, color)
         # Top Left
-        draw_circle(cr, mToPx(inToM(422.625)), yorigin + mToPx(inToM(55.5), True), 10, color)
+        draw_circle(cr, mToPx(inToM(422.625)),
+                    yorigin + mToPx(inToM(55.5), True), 10, color)
         # Bottom Left
         draw_circle(cr, mToPx(inToM(422.625)), yorigin, 10, color)
 
         # Top Trench Run
         # Top Right
-        draw_circle(cr, mToPx(inToM(206.625)), yorigin + mToPx(inToM(323.25), True), 10, color)
+        draw_circle(cr, mToPx(inToM(206.625)),
+                    yorigin + mToPx(inToM(323.25), True), 10, color)
         # Bottom Right
-        draw_circle(cr, mToPx(inToM(206.625)), yorigin + mToPx(inToM(281.26), True), 10, color)
+        draw_circle(cr, mToPx(inToM(206.625)),
+                    yorigin + mToPx(inToM(281.26), True), 10, color)
         # Top Left
-        draw_circle(cr, mToPx(inToM(422.625)), yorigin + mToPx(inToM(281.26), True), 10, color)
+        draw_circle(cr, mToPx(inToM(422.625)),
+                    yorigin + mToPx(inToM(281.26), True), 10, color)
         # Bottom Left
-        draw_circle(cr, mToPx(inToM(422.625)), yorigin + mToPx(inToM(323.25), True), 10, color)
+        draw_circle(cr, mToPx(inToM(422.625)),
+                    yorigin + mToPx(inToM(323.25), True), 10, color)
         cr.stroke()
 
-def draw_init_lines(cr):
-    yorigin = 0-SCREEN_SIZE/2 # Move origin to bottom left
-    set_color(cr, palette["RED"])
-    cr.move_to(mToPx(inToM(120)), yorigin)
-    cr.line_to(mToPx(inToM(120)), yorigin + mToPx(8.21055, True))
 
-    cr.move_to(mToPx(inToM(505.25)), yorigin)
-    cr.line_to(mToPx(inToM(505.25)), yorigin + mToPx(8.21055, True))
+def draw_init_lines(cr):
+    set_color(cr, palette["RED"])
+    init_line_x = WIDTH_OF_FIELD_IN_METERS / 2.0 - inToM(120)
+    init_start_y = -LENGTH_OF_FIELD_IN_METERS / 2.0
+    init_end_y = LENGTH_OF_FIELD_IN_METERS / 2.0
+    cr.move_to(mToPx(init_line_x), mToPx(init_start_y))
+    cr.line_to(mToPx(init_line_x), mToPx(init_end_y))
+
+    cr.move_to(mToPx(-init_line_x), mToPx(init_start_y))
+    cr.line_to(mToPx(-init_line_x), mToPx(init_end_y))
 
     cr.stroke()
 
+
 def draw_trench_run(cr):
-    set_color(cr, palette["GREEN"])
-    yorigin = 0-SCREEN_SIZE/2 # Move origin to bottom left
-    cr.move_to(mToPx(inToM(206.625)), yorigin)
-    cr.line_to(mToPx(inToM(206.625)), yorigin + mToPx(inToM(55.5), True))
+    edge_of_field_y = LENGTH_OF_FIELD_IN_METERS / 2.0
+    edge_of_trench_y = edge_of_field_y - inToM(55.5)
+    trench_start_x = inToM(-108.0)
+    trench_length_x = inToM(216.0)
+    ball_line_y = edge_of_field_y - inToM(27.75)
+    ball_one_x = -inToM(72)
+    ball_two_x = -inToM(36)
+    ball_three_x = 0.0
+    # The fourth/fifth balls are referenced off of the init line...
+    ball_fourfive_x = WIDTH_OF_FIELD_IN_METERS / 2.0 - inToM(120.0 + 130.36)
 
-    cr.move_to(mToPx(inToM(206.625)), yorigin + mToPx(inToM(55.5), True))
-    cr.line_to(mToPx(inToM(422.625)), yorigin + mToPx(inToM(55.5), True))
-
-    cr.move_to(mToPx(inToM(422.625)), yorigin + mToPx(inToM(55.5), True))
-    cr.line_to(mToPx(inToM(422.625)), yorigin)
-
-    cr.move_to(mToPx(inToM(206.625)), yorigin + mToPx(inToM(323.25), True))
-    cr.line_to(mToPx(inToM(206.625)), yorigin + mToPx(inToM(281.26), True))
-
-    cr.move_to(mToPx(inToM(206.625)), yorigin + mToPx(inToM(281.26), True))
-    cr.line_to(mToPx(inToM(422.625)), yorigin + mToPx(inToM(281.26), True))
-
-    cr.move_to(mToPx(inToM(422.625)), yorigin + mToPx(inToM(281.26), True))
-    cr.line_to(mToPx(inToM(422.625)), yorigin + mToPx(inToM(323.25), True))
+    for sign in [1.0, -1.0]:
+        set_color(cr, palette["GREEN"])
+        cr.rectangle(mToPx(sign * trench_start_x),
+                     mToPx(sign * edge_of_field_y),
+                     mToPx(sign * trench_length_x),
+                     mToPx(sign * (edge_of_trench_y - edge_of_field_y)))
+        cr.stroke()
+        draw_circle(cr, mToPx(sign * ball_one_x), mToPx(sign * ball_line_y),
+                    mToPx(0.1), palette["YELLOW"])
+        draw_circle(cr, mToPx(sign * ball_two_x), mToPx(sign * ball_line_y),
+                    mToPx(0.1), palette["YELLOW"])
+        draw_circle(cr, mToPx(sign * ball_three_x), mToPx(sign * ball_line_y),
+                    mToPx(0.1), palette["YELLOW"])
 
     cr.stroke()
 
+
 def draw_shield_generator(cr):
     set_color(cr, palette["BLUE"])
-    yorigin = 0-SCREEN_SIZE/2 # Move origin to bottom left
-
-    cr.move_to(mToPx(inToM(206.625)), yorigin + mToPx(inToM(212.097), True))
-    cr.line_to(mToPx(inToM(373.616)), yorigin + mToPx(inToM(281.26), True))
-
-    cr.move_to(mToPx(inToM(373.616)), yorigin + mToPx(inToM(281.26), True))
-    cr.line_to(mToPx(inToM(422.625)), yorigin + mToPx(inToM(124.67), True))
-
-    cr.move_to(mToPx(inToM(422.625)), yorigin + mToPx(inToM(124.67), True))
-    cr.line_to(mToPx(inToM(255.634)), yorigin + mToPx(inToM(55.5), True))
-
-    cr.move_to(mToPx(inToM(255.634)), yorigin + mToPx(inToM(55.5), True))
-    cr.line_to(mToPx(inToM(206.625)), yorigin + mToPx(inToM(212.097), True))
+    cr.save()
+    cr.rotate(22.5 * np.pi / 180.)
+    generator_width = mToPx(inToM(14 * 12 + 0.75))
+    generator_height = mToPx(inToM(13 * 12 + 1.5))
+    cr.rectangle(-generator_width / 2.0, -generator_height / 2.0,
+                 generator_width, generator_height)
+    cr.restore()
 
     cr.stroke()
 
-def draw_control_panel(cr): # Base plates are not included
+
+def draw_control_panel(cr):  # Base plates are not included
     set_color(cr, palette["LIGHT_GREY"])
-    yorigin = 0-SCREEN_SIZE/2 # Move origin to bottom left
-    # Bottom Control Panel
-    # Top Line
-    cr.move_to(mToPx(inToM(225.624)), yorigin + mToPx(inToM(55.5), True))
-    cr.line_to(mToPx(inToM(285.624)), yorigin + mToPx(inToM(55.5), True))
-
-    # Left Line
-    cr.move_to(mToPx(inToM(225.624)),  yorigin + mToPx(inToM(55.5), True))
-    cr.line_to(mToPx(inToM(225.624)), yorigin)
-
-    # Right Line
-    cr.move_to(mToPx(inToM(285.624)), yorigin + mToPx(inToM(55.5), True))
-    cr.line_to(mToPx(inToM(285.624)), yorigin)
-
-    # Top Control Panel
-    # Bottom Line
-    cr.move_to(mToPx(inToM(403.616)), yorigin + mToPx(inToM(281.26), True))
-    cr.line_to(mToPx(inToM(343.616)), yorigin + mToPx(inToM(281.26), True))
-
-    # Right Line
-    cr.move_to(mToPx(inToM(403.616)), yorigin + mToPx(inToM(281.26), True))
-    cr.line_to(mToPx(inToM(403.616)), yorigin + mToPx(inToM(323.25), True))
-
-    # Left Line
-    cr.move_to(mToPx(inToM(343.616)), yorigin + mToPx(inToM(281.26), True))
-    cr.line_to(mToPx(inToM(343.616)), yorigin + mToPx(inToM(323.25), True))
+    edge_of_field_y = LENGTH_OF_FIELD_IN_METERS / 2.0
+    edge_of_trench_y = edge_of_field_y - inToM(55.5)
+    high_x = inToM(374.59) - WIDTH_OF_FIELD_IN_METERS / 2.0
+    low_x = high_x - inToM(30)
+    for sign in [1.0, -1.0]:
+        # Bottom Control Panel
+        # Top Line
+        cr.rectangle(sign * mToPx(high_x), sign * mToPx(edge_of_field_y),
+                     -sign * mToPx(inToM(30)), -sign * mToPx(inToM(55.5)))
 
     cr.stroke()
 
+
 def draw_HAB(cr):
     # BASE Constants
     X_BASE = 0
@@ -430,6 +434,7 @@
                  mToPx(1.41605))
     cr.stroke()
 
+
 def draw_points(cr, p, size):
     for i in range(0, len(p)):
         draw_px_cross(cr, p[i][0], p[i][1], size,