diff --git a/SketchWidget.py b/SketchWidget.py index fe3e74b..741c26e 100644 --- a/SketchWidget.py +++ b/SketchWidget.py @@ -28,6 +28,7 @@ class SketchWidget: self.axis_color = (1.0, 0.0, 0.0, 1.0) self.constraint_color = (0.8, 1.0, 0.0, 1.0) self.snap_angle = 10 + self.snap_dist = 10 try: # try double-buffered @@ -254,10 +255,15 @@ class SketchWidget: start = self.drawingLine.getPt(0) angle = math.atan2(this_pt[1] - start[1], this_pt[0] - start[0]) angle *= 180.0 / math.pi - def snaps_to(q): return abs(angle - q) < self.snap_angle - if snaps_to(-180) or snaps_to(180) or snaps_to(0): + def within(a, b, d): return abs(a - b) < d + def snaps_to(q): return within(angle, q, self.snap_angle) + if (snaps_to(-180) or snaps_to(180) or snaps_to(0)) \ + and within(start[1], this_pt[1], + self.screenDistToDist(self.snap_dist)): this_pt = (this_pt[0], start[1]) - elif snaps_to(-90) or snaps_to(90): + elif (snaps_to(-90) or snaps_to(90)) \ + and within(start[0], this_pt[0], + self.screenDistToDist(self.snap_dist)): this_pt = (start[0], this_pt[1]) self.drawingLine.setPt(1, this_pt) self.queue_redraw()