snap within angle and distance

This commit is contained in:
Josh Holtrop 2011-04-23 22:35:27 -04:00
parent 6a6e635902
commit b34ba613b2

View File

@ -28,6 +28,7 @@ class SketchWidget:
self.axis_color = (1.0, 0.0, 0.0, 1.0) self.axis_color = (1.0, 0.0, 0.0, 1.0)
self.constraint_color = (0.8, 1.0, 0.0, 1.0) self.constraint_color = (0.8, 1.0, 0.0, 1.0)
self.snap_angle = 10 self.snap_angle = 10
self.snap_dist = 10
try: try:
# try double-buffered # try double-buffered
@ -254,10 +255,15 @@ class SketchWidget:
start = self.drawingLine.getPt(0) start = self.drawingLine.getPt(0)
angle = math.atan2(this_pt[1] - start[1], this_pt[0] - start[0]) angle = math.atan2(this_pt[1] - start[1], this_pt[0] - start[0])
angle *= 180.0 / math.pi angle *= 180.0 / math.pi
def snaps_to(q): return abs(angle - q) < self.snap_angle def within(a, b, d): return abs(a - b) < d
if snaps_to(-180) or snaps_to(180) or snaps_to(0): 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]) 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]) this_pt = (start[0], this_pt[1])
self.drawingLine.setPt(1, this_pt) self.drawingLine.setPt(1, this_pt)
self.queue_redraw() self.queue_redraw()