Add 2023 field to Spline UI

Copied the 2023 field image to Spline UI.

Signed-off-by: Ravago Jones <ravagojones@gmail.com>
Change-Id: I6553c88064f150a0f855b13a43750370375fa7f0
diff --git a/frc971/control_loops/python/BUILD b/frc971/control_loops/python/BUILD
index c547833..e308954 100644
--- a/frc971/control_loops/python/BUILD
+++ b/frc971/control_loops/python/BUILD
@@ -188,7 +188,7 @@
     data = glob([
         "field_images/*.png",
         "field_images/*.svg",
-    ]),
+    ]) + ["//third_party/y2023/field:pictures"],
     legacy_create_init = False,
     target_compatible_with = ["@platforms//cpu:x86_64"],
     visibility = ["//visibility:public"],
diff --git a/frc971/control_loops/python/constants.py b/frc971/control_loops/python/constants.py
index b2d9d57..3a61b5e 100644
--- a/frc971/control_loops/python/constants.py
+++ b/frc971/control_loops/python/constants.py
@@ -15,6 +15,9 @@
 ROBOT_SIDE_TO_HATCH_PANEL = 0.1
 HATCH_PANEL_WIDTH = 0.4826
 
+# field_id is either just a file prefix for a .png in field_images/ or is a
+# full path preceded by // specifying a location relative to the root of the
+# repository.
 FieldType = namedtuple(
     'Field', ['name', 'tags', 'year', 'width', 'length', 'robot', 'field_id'])
 RobotType = namedtuple("Robot", ['width', 'length'])
@@ -33,6 +36,7 @@
 Robot2020 = RobotType(width=0.8128, length=0.8636)  # 32 in x 34 in
 Robot2021 = Robot2020
 Robot2022 = RobotType(width=0.8763, length=0.96647)
+Robot2023 = RobotType(width=0.8763, length=0.96647)
 
 FIELDS = {
     "2019 Field":
@@ -115,9 +119,17 @@
               length=8.2296,
               robot=Robot2022,
               field_id="2022"),
+    "2023 Field":
+    FieldType("2023 Field",
+              tags=[],
+              year=2023,
+              width=16.59255,
+              length=8.10895,
+              robot=Robot2023,
+              field_id="//third_party/y2023/field/2023.png"),
 }
 
-FIELD = FIELDS["2022 Field"]
+FIELD = FIELDS["2023 Field"]
 
 
 def get_json_folder(field):
diff --git a/frc971/control_loops/python/path_edit.py b/frc971/control_loops/python/path_edit.py
index 2b55e94..86777e5 100755
--- a/frc971/control_loops/python/path_edit.py
+++ b/frc971/control_loops/python/path_edit.py
@@ -81,9 +81,13 @@
     def set_field(self, field):
         self.field = field
         try:
-            self.field_png = cairo.ImageSurface.create_from_png(
-                "frc971/control_loops/python/field_images/" +
-                self.field.field_id + ".png")
+            if self.field.field_id.startswith('//'):
+                self.field_png = cairo.ImageSurface.create_from_png(
+                    self.field.field_id[2:])
+            else:
+                self.field_png = cairo.ImageSurface.create_from_png(
+                    "frc971/control_loops/python/field_images/" +
+                    self.field.field_id + ".png")
         except cairo.Error:
             self.field_png = None
 
diff --git a/frc971/control_loops/python/spline_graph.py b/frc971/control_loops/python/spline_graph.py
index fbe43bf..ce5efe1 100755
--- a/frc971/control_loops/python/spline_graph.py
+++ b/frc971/control_loops/python/spline_graph.py
@@ -107,7 +107,7 @@
 
         self.file_name_box = Gtk.Entry()
         self.file_name_box.set_size_request(50, 40)
-        self.file_name_box.set_text(FIELD.field_id + ".json")
+        self.file_name_box.set_text("test.json")
         self.file_name_box.set_editable(True)
 
         self.long_input = Gtk.SpinButton()
diff --git a/y2023/www/2023.png b/third_party/y2023/field/2023.png
similarity index 100%
rename from y2023/www/2023.png
rename to third_party/y2023/field/2023.png
Binary files differ
diff --git a/third_party/y2023/field/BUILD b/third_party/y2023/field/BUILD
index e7ba4e2..de1d382 100644
--- a/third_party/y2023/field/BUILD
+++ b/third_party/y2023/field/BUILD
@@ -1,11 +1,14 @@
-# Pictures from FIRST modified by Tea Fazio.
-# https://firstfrc.blob.core.windows.net/frc2023/Manual/2023FRCGameManual.pdf
-# Copyright 2023 FIRST
-
 filegroup(
     name = "pictures",
     srcs = [
-        "field.jpg",
-    ],
+     # Picture from the FIRST inspires field drawings.
+     # https://www.firstinspires.org/robotics/frc/playing-field
+     # Copyright 2023 FIRST
+     "2023.png",
+     # Picture from FIRST modified by Tea Fazio.
+     # https://firstfrc.blob.core.windows.net/frc2023/Manual/2023FRCGameManual.pdf
+     # Copyright 2023 FIRST
+     "field.jpg",
+ ],
     visibility = ["//visibility:public"],
 )
diff --git a/y2023/www/BUILD b/y2023/www/BUILD
index 27cc69e..09cd4d8 100644
--- a/y2023/www/BUILD
+++ b/y2023/www/BUILD
@@ -7,10 +7,17 @@
         "**/*.html",
         "**/*.css",
         "**/*.png",
-    ]),
+    ]) + ["2023.png"],
     visibility = ["//visibility:public"],
 )
 
+genrule(
+    name = "2023_field_png",
+    srcs = ["//third_party/y2023/field:pictures"],
+    outs = ["2023.png"],
+    cmd = "cp third_party/y2023/field/2023.png $@",
+)
+
 ts_project(
     name = "field_main",
     srcs = [