Separate field events into Field even more
Signed-off-by: Ravago Jones <ravagojones@gmail.com>
Change-Id: I3f137e92eaf1a2fab24567d2d95b93b375351110
diff --git a/frc971/control_loops/python/constants.py b/frc971/control_loops/python/constants.py
index 10e6786..15bac77 100644
--- a/frc971/control_loops/python/constants.py
+++ b/frc971/control_loops/python/constants.py
@@ -118,7 +118,7 @@
field_id="autonav_bounce"),
}
-FIELD = FIELDS["2021 Galactic Search BRed"]
+FIELD = FIELDS["2020 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 959b382..65a376b 100755
--- a/frc971/control_loops/python/path_edit.py
+++ b/frc971/control_loops/python/path_edit.py
@@ -57,6 +57,12 @@
self.transform = cairo.Matrix()
+ self.set_events(Gdk.EventMask.BUTTON_PRESS_MASK
+ | Gdk.EventMask.BUTTON_PRESS_MASK
+ | Gdk.EventMask.BUTTON_RELEASE_MASK
+ | Gdk.EventMask.POINTER_MOTION_MASK
+ | Gdk.EventMask.SCROLL_MASK)
+
try:
self.field_png = cairo.ImageSurface.create_from_png(
"frc971/control_loops/python/field_images/" + FIELD.field_id +
@@ -258,12 +264,7 @@
cr.restore()
def draw_splines(self, cr):
- for i, points in enumerate(self.points.getSplines()):
- array = np.zeros(shape=(6, 2), dtype=float)
- for j, point in enumerate(points):
- array[j, 0] = point[0]
- array[j, 1] = point[1]
- spline = Spline(np.ascontiguousarray(np.transpose(array)))
+ for i, spline in enumerate(self.points.getLibsplines()):
for k in np.linspace(0.01, 1, 100):
cr.move_to(
self.mToPx(spline.Point(k - 0.01)[0]),
@@ -276,25 +277,6 @@
self.draw_robot_at_point(cr, 0.00, 0.01, spline)
self.draw_robot_at_point(cr, 1, 0.01, spline)
- def mouse_move(self, event):
- old_x = self.mousex
- old_y = self.mousey
- self.mousex, self.mousey = self.input_transform.transform_point(
- event.x, event.y)
- dif_x = self.mousex - old_x
- dif_y = self.mousey - old_y
- difs = np.array([self.pxToM(dif_x), self.pxToM(dif_y)])
-
- if self.mode == Mode.kEditing and self.spline_edit != -1:
- self.points.updates_for_mouse_move(self.index_of_edit,
- self.spline_edit,
- self.pxToM(self.mousex),
- self.pxToM(self.mousey), difs)
-
- self.points.update_lib_spline()
- self.graph.schedule_recalculate(self.points)
- self.queue_draw()
-
def export_json(self, file_name):
self.path_to_export = os.path.join(
self.module_path, # position of the python
@@ -343,8 +325,10 @@
print("SPLINES LOADED")
self.mode = Mode.kEditing
+ self.queue_draw()
+ self.graph.schedule_recalculate(self.points)
- def key_press(self, event):
+ def do_key_press_event(self, event):
keyval = Gdk.keyval_to_lower(event.keyval)
# TODO: This should be a button
@@ -361,7 +345,25 @@
self.points.getSplines()[len(self.points.getSplines()) - 1][3])
self.queue_draw()
- def button_press(self, event):
+ def do_button_release_event(self, event):
+ self.mousex, self.mousey = self.input_transform.transform_point(
+ event.x, event.y)
+ if self.mode == Mode.kEditing:
+ if self.index_of_edit > -1 and self.held_x != self.mousex:
+
+ self.points.setSplines(self.spline_edit, self.index_of_edit,
+ self.pxToM(self.mousex),
+ self.pxToM(self.mousey))
+
+ self.points.splineExtrapolate(self.spline_edit)
+
+ self.points.update_lib_spline()
+ self.graph.schedule_recalculate(self.points)
+
+ self.index_of_edit = -1
+ self.spline_edit = -1
+
+ def do_button_press_event(self, event):
self.mousex, self.mousey = self.input_transform.transform_point(
event.x, event.y)
@@ -369,6 +371,7 @@
if self.points.add_point(
self.pxToM(self.mousex), self.pxToM(self.mousey)):
self.mode = Mode.kEditing
+ self.graph.schedule_recalculate(self.points)
elif self.mode == Mode.kEditing:
# Now after index_of_edit is not -1, the point is selected, so
# user can click for new point
@@ -396,25 +399,26 @@
self.held_x = self.mousex
self.queue_draw()
- def button_release(self, event):
+ def do_motion_notify_event(self, event):
+ old_x = self.mousex
+ old_y = self.mousey
self.mousex, self.mousey = self.input_transform.transform_point(
event.x, event.y)
- if self.mode == Mode.kEditing:
- if self.index_of_edit > -1 and self.held_x != self.mousex:
+ dif_x = self.mousex - old_x
+ dif_y = self.mousey - old_y
+ difs = np.array([self.pxToM(dif_x), self.pxToM(dif_y)])
- self.points.setSplines(self.spline_edit, self.index_of_edit,
- self.pxToM(self.mousex),
- self.pxToM(self.mousey))
+ if self.mode == Mode.kEditing and self.spline_edit != -1:
+ self.points.updates_for_mouse_move(self.index_of_edit,
+ self.spline_edit,
+ self.pxToM(self.mousex),
+ self.pxToM(self.mousey), difs)
- self.points.splineExtrapolate(self.spline_edit)
+ self.points.update_lib_spline()
+ self.graph.schedule_recalculate(self.points)
+ self.queue_draw()
- self.points.update_lib_spline()
- self.graph.schedule_recalculate(self.points)
-
- self.index_of_edit = -1
- self.spline_edit = -1
-
- def mouse_scroll(self, event):
+ def do_scroll_event(self, event):
self.mousex, self.mousey = self.input_transform.transform_point(
event.x, event.y)
diff --git a/frc971/control_loops/python/spline_graph.py b/frc971/control_loops/python/spline_graph.py
index a8e5c78..99c496b 100755
--- a/frc971/control_loops/python/spline_graph.py
+++ b/frc971/control_loops/python/spline_graph.py
@@ -20,9 +20,6 @@
self.connect(event, handler)
- def configure(self, event):
- self.field.window_shape = (event.width, event.height)
-
def output_json_clicked(self, button):
self.field.export_json(self.file_name_box.get_text())
@@ -37,10 +34,12 @@
def long_changed(self, button):
value = self.long_input.get_value()
self.field.points.setConstraint("LONGITUDINAL_ACCELERATION", value)
+ self.field.graph.schedule_recalculate(self.field.points)
def lat_changed(self, button):
value = self.lat_input.get_value()
self.field.points.setConstraint("LATERAL_ACCELERATION", value)
+ self.field.graph.schedule_recalculate(self.field.points)
def vel_changed(self, button):
value = self.vel_input.get_value()
@@ -48,6 +47,7 @@
def vol_changed(self, button):
value = self.vol_input.get_value()
self.field.points.setConstraint("VOLTAGE", value)
+ self.field.graph.schedule_recalculate(self.field.points)
def input_combobox_choice(self, combo):
text = combo.get_active_text()
@@ -64,23 +64,10 @@
container.set_vexpand(True)
self.add(container)
- self.eventBox = Gtk.EventBox()
- self.eventBox.set_events(Gdk.EventMask.BUTTON_PRESS_MASK
- | Gdk.EventMask.BUTTON_PRESS_MASK
- | Gdk.EventMask.BUTTON_RELEASE_MASK
- | Gdk.EventMask.POINTER_MOTION_MASK
- | Gdk.EventMask.SCROLL_MASK
- | Gdk.EventMask.KEY_PRESS_MASK)
-
self.field = FieldWidget()
self.method_connect("delete-event", basic_window.quit_main_loop)
- self.method_connect("key-release-event", self.field.key_press)
- self.method_connect("button-press-event", self.field.button_press)
- self.method_connect("button-release-event", self.field.button_release)
- self.method_connect("configure-event", self.configure)
- self.method_connect("motion_notify_event", self.field.mouse_move)
- self.method_connect("scroll_event", self.field.mouse_scroll)
+ self.method_connect("key-release-event", self.field.do_key_press_event)
self.file_name_box = Gtk.Entry()
self.file_name_box.set_size_request(200, 40)
@@ -156,7 +143,8 @@
for game in FIELDS.keys():
self.game_combo.append_text(game)
- self.game_combo.set_active(0)
+ if FIELD in FIELDS.values():
+ self.game_combo.set_active(list(FIELDS.values()).index(FIELD))
self.game_combo.set_size_request(100, 40)
limitControls = Gtk.FlowBox()
@@ -186,8 +174,7 @@
container.attach(self.label, 4, 0, 1, 1)
container.attach(self.game_combo, 5, 0, 1, 1)
- self.eventBox.add(self.field)
- container.attach(self.eventBox, 1, 1, 4, 4)
+ container.attach(self.field, 1, 1, 4, 4)
container.attach(self.field.graph, 0, 10, 10, 1)