Splines gui
Change-Id: Ic625138c1a9f39833c15542149fdeb11301b8c95
diff --git a/y2018/control_loops/python/BUILD b/y2018/control_loops/python/BUILD
index 14f8290..af158de 100644
--- a/y2018/control_loops/python/BUILD
+++ b/y2018/control_loops/python/BUILD
@@ -176,6 +176,7 @@
srcs_version = "PY3",
deps = [
"//frc971/control_loops/python:basic_window",
+ "//frc971/control_loops/python:color",
":python_init",
"@python_gtk",
],
diff --git a/y2018/control_loops/python/graph_edit.py b/y2018/control_loops/python/graph_edit.py
index a2cf414..fa9c9e5 100644
--- a/y2018/control_loops/python/graph_edit.py
+++ b/y2018/control_loops/python/graph_edit.py
@@ -2,20 +2,20 @@
from __future__ import print_function
import os
-import basic_window
-from color import Color, palette
+from frc971.control_loops.python import basic_window
+from frc971.control_loops.python.color import Color, palette
import random
import gi
import numpy
gi.require_version('Gtk', '3.0')
-from gi.repository import Gdk
+from gi.repository import Gdk, Gtk
import cairo
import graph_generate
from graph_generate import XYSegment, AngleSegment, to_theta, to_xy, alpha_blend
from graph_generate import back_to_xy_loop, subdivide_theta, to_theta_loop
from graph_generate import l1, l2, joint_center
-from basic_window import OverrideMatrix, identity, quit_main_loop, set_color
+from frc971.control_loops.python.basic_window import OverrideMatrix, identity, quit_main_loop, set_color
import shapely
from shapely.geometry import Polygon
@@ -157,7 +157,7 @@
abs(dpx * pdx + dpy * pdy)
-#
+
def closest_segment(lines, pt):
c_pt, c_pt_dist = get_closest(lines[-1], lines[0], pt)
for i in range(1, len(lines)):
@@ -175,6 +175,21 @@
def __init__(self):
super(Silly, self).__init__()
+ self.window = Gtk.Window()
+ self.window.set_title("DrawingArea")
+
+ self.window.set_events(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.method_connect("key-press-event", self.do_key_press)
+ self.method_connect("button-press-event",
+ self._do_button_press_internal)
+ self.method_connect("configure-event", self._do_configure)
+ self.window.add(self)
+ self.window.show_all()
+
self.theta_version = False
self.reinit_extents()
@@ -188,6 +203,38 @@
self.spline_edit = 0
self.edit_control1 = True
+ def do_key_press(self, event):
+ pass
+
+ def _do_button_press_internal(self, event):
+ o_x = event.x
+ o_y = event.y
+ x = event.x - self.window_shape[0] / 2
+ y = self.window_shape[1] / 2 - event.y
+ scale = self.get_current_scale()
+ event.x = x / scale + self.center[0]
+ event.y = y / scale + self.center[1]
+ self.do_button_press(event)
+ event.x = o_x
+ event.y = o_y
+
+ def do_button_press(self, event):
+ pass
+
+ def _do_configure(self, event):
+ self.window_shape = (event.width, event.height)
+
+ def redraw(self):
+ if not self.needs_redraw:
+ self.needs_redraw = True
+ self.window.queue_draw()
+
+ def method_connect(self, event, cb):
+ def handler(obj, *args):
+ cb(*args)
+
+ self.window.connect(event, handler)
+
def reinit_extents(self):
if self.theta_version:
self.extents_x_min = -numpy.pi * 2