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