snap lines to horizontal/vertical within snap_angle degrees

This commit is contained in:
Josh Holtrop 2011-04-23 21:48:42 -04:00
parent 02db7d629d
commit 854df86eaf

View File

@ -27,6 +27,7 @@ class SketchWidget:
self.line_color = (0.1, 0.6, 1.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.snap_angle = 10
try:
# try double-buffered
@ -208,10 +209,12 @@ class SketchWidget:
def button_press_event(self, widget, event, data = None):
if event.button == 1:
start = self.screenPtToPt((event.x, self.size[1] - event.y))
if self.drawingLine is not None:
self.sketch.shapes.append(self.drawingLine)
start = self.screenPtToPt((event.x, self.size[1] - event.y))
start = self.drawingLine.getPt(1)
self.drawingLine = Line(start[0], start[1], start[0], start[1])
self.queue_redraw()
elif event.button == 2:
self.panning = True
self.panning_start = (event.x, self.size[1] - event.y)
@ -235,6 +238,14 @@ class SketchWidget:
self.queue_redraw()
elif self.drawingLine is not None:
this_pt = self.screenPtToPt((event.x, self.size[1] - event.y))
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):
this_pt = (this_pt[0], start[1])
elif snaps_to(-90) or snaps_to(90):
this_pt = (start[0], this_pt[1])
self.drawingLine.setPt(1, this_pt)
self.queue_redraw()