From f489d11a57ca7470ae8d491b8a82420111454aa8 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 28 Jul 2011 19:53:01 -0400 Subject: [PATCH] draw in-progress lines to snap point --- SketchWidget.py | 56 ++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/SketchWidget.py b/SketchWidget.py index 163134a..5794189 100644 --- a/SketchWidget.py +++ b/SketchWidget.py @@ -416,37 +416,41 @@ class SketchWidget: self.queue_redraw() def do_line_motion(self, x, y): + snap_ptref = self.get_closest_snap_ptref(x, y) + self.update_hover_snap_point(snap_ptref) if self.drawingShape is not None: this_pt = self.screenPtToPt((x, self.size[1] - y)) - start = self.drawingShape.getPt(0) - angle = math.atan2(this_pt[1] - start[1], this_pt[0] - start[0]) - angle *= 180.0 / math.pi - def within(a, b, d): return abs(a - b) < d - def snaps_to(q): return within(angle, q, self.snap_angle) - hv_snap_dist = self.screenDistToDist(self.hv_snap_dist) - if ((snaps_to(-180) or snaps_to(180) or snaps_to(0)) - and within(start[1], this_pt[1], hv_snap_dist)): - this_pt = (this_pt[0], start[1]) - if not ('hv' in self.drawingConstraints - and isinstance(self.drawingConstraints['hv'], - Horizontal)): - c = Horizontal(self.drawingShape, 0, self.drawingShape, 1) - self.drawingConstraints['hv'] = c - elif ((snaps_to(-90) or snaps_to(90)) - and within(start[0], this_pt[0], hv_snap_dist)): - this_pt = (start[0], this_pt[1]) - if not ('hv' in self.drawingConstraints - and isinstance(self.drawingConstraints['hv'], - Vertical)): - c = Vertical(self.drawingShape, 0, self.drawingShape, 1) - self.drawingConstraints['hv'] = c + if snap_ptref is not None: + this_pt = snap_ptref.getPt() + self.drawingConstraints['hv'] = None else: - if 'hv' in self.drawingConstraints: - del self.drawingConstraints['hv'] + start = self.drawingShape.getPt(0) + angle = math.atan2(this_pt[1] - start[1], this_pt[0] - start[0]) + angle *= 180.0 / math.pi + def within(a, b, d): return abs(a - b) < d + def snaps_to(q): return within(angle, q, self.snap_angle) + hv_snap_dist = self.screenDistToDist(self.hv_snap_dist) + if ((snaps_to(-180) or snaps_to(180) or snaps_to(0)) + and within(start[1], this_pt[1], hv_snap_dist)): + this_pt = (this_pt[0], start[1]) + if not ('hv' in self.drawingConstraints + and isinstance(self.drawingConstraints['hv'], + Horizontal)): + c = Horizontal( + self.drawingShape, 0, self.drawingShape, 1) + self.drawingConstraints['hv'] = c + elif ((snaps_to(-90) or snaps_to(90)) + and within(start[0], this_pt[0], hv_snap_dist)): + this_pt = (start[0], this_pt[1]) + if not ('hv' in self.drawingConstraints + and isinstance(self.drawingConstraints['hv'], + Vertical)): + c = Vertical(self.drawingShape, 0, self.drawingShape, 1) + self.drawingConstraints['hv'] = c + else: + self.drawingConstraints['hv'] = None self.drawingShape.setPt(1, this_pt) self.queue_redraw() - sp = self.get_closest_snap_ptref(x, y) - self.update_hover_snap_point(sp) def do_circle_left_click(self, x, y): pt = self.screenPtToPt((x, self.size[1] - y))