snap within angle and distance
This commit is contained in:
parent
6a6e635902
commit
b34ba613b2
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user