snap lines to horizontal/vertical within snap_angle degrees
This commit is contained in:
parent
02db7d629d
commit
854df86eaf
@ -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()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user