added some basic boundary checking for moving nodes and shapes
This commit is contained in:
parent
d343bd0655
commit
9c302e8bc6
3 changed files with 28 additions and 1 deletions
|
@ -138,6 +138,11 @@ class CanvasGraph(tk.Canvas):
|
||||||
valid_y = y1 <= y <= y2
|
valid_y = y1 <= y <= y2
|
||||||
return valid_x and valid_y
|
return valid_x and valid_y
|
||||||
|
|
||||||
|
def valid_position(self, x1, y1, x2, y2):
|
||||||
|
valid_topleft = self.inside_canvas(x1, y1)
|
||||||
|
valid_bottomright = self.inside_canvas(x2, y2)
|
||||||
|
return valid_topleft and valid_bottomright
|
||||||
|
|
||||||
def draw_grid(self):
|
def draw_grid(self):
|
||||||
"""
|
"""
|
||||||
Create grid.
|
Create grid.
|
||||||
|
@ -539,6 +544,13 @@ class CanvasGraph(tk.Canvas):
|
||||||
"""
|
"""
|
||||||
x, y = self.canvas_xy(event)
|
x, y = self.canvas_xy(event)
|
||||||
if not self.inside_canvas(x, y):
|
if not self.inside_canvas(x, y):
|
||||||
|
if self.select_box:
|
||||||
|
self.select_box.delete()
|
||||||
|
self.select_box = None
|
||||||
|
if is_draw_shape(self.annotation_type) and self.shape_drawing:
|
||||||
|
shape = self.shapes.pop(self.selected)
|
||||||
|
shape.delete()
|
||||||
|
self.shape_drawing = False
|
||||||
return
|
return
|
||||||
|
|
||||||
x_offset = x - self.cursor[0]
|
x_offset = x - self.cursor[0]
|
||||||
|
|
|
@ -103,10 +103,19 @@ class CanvasNode:
|
||||||
self.motion(x_offset, y_offset, update=False)
|
self.motion(x_offset, y_offset, update=False)
|
||||||
|
|
||||||
def motion(self, x_offset, y_offset, update=True):
|
def motion(self, x_offset, y_offset, update=True):
|
||||||
|
original_position = self.canvas.coords(self.id)
|
||||||
self.canvas.move(self.id, x_offset, y_offset)
|
self.canvas.move(self.id, x_offset, y_offset)
|
||||||
|
x, y = self.canvas.coords(self.id)
|
||||||
|
|
||||||
|
# check new position
|
||||||
|
bbox = self.canvas.bbox(self.id)
|
||||||
|
if not self.canvas.valid_position(*bbox):
|
||||||
|
self.canvas.coords(self.id, original_position)
|
||||||
|
return
|
||||||
|
|
||||||
|
# move test and selection box
|
||||||
self.canvas.move(self.text_id, x_offset, y_offset)
|
self.canvas.move(self.text_id, x_offset, y_offset)
|
||||||
self.canvas.move_selection(self.id, x_offset, y_offset)
|
self.canvas.move_selection(self.id, x_offset, y_offset)
|
||||||
x, y = self.canvas.coords(self.id)
|
|
||||||
|
|
||||||
# move antennae
|
# move antennae
|
||||||
for antenna_id in self.antennae:
|
for antenna_id in self.antennae:
|
||||||
|
|
|
@ -136,7 +136,13 @@ class Shape:
|
||||||
self.canvas.delete(self.id)
|
self.canvas.delete(self.id)
|
||||||
|
|
||||||
def motion(self, x_offset, y_offset):
|
def motion(self, x_offset, y_offset):
|
||||||
|
original_position = self.canvas.coords(self.id)
|
||||||
self.canvas.move(self.id, x_offset, y_offset)
|
self.canvas.move(self.id, x_offset, y_offset)
|
||||||
|
coords = self.canvas.coords(self.id)
|
||||||
|
if not self.canvas.valid_position(*coords):
|
||||||
|
self.canvas.coords(self.id, original_position)
|
||||||
|
return
|
||||||
|
|
||||||
self.canvas.move_selection(self.id, x_offset, y_offset)
|
self.canvas.move_selection(self.id, x_offset, y_offset)
|
||||||
if self.text_id is not None:
|
if self.text_id is not None:
|
||||||
self.canvas.move(self.text_id, x_offset, y_offset)
|
self.canvas.move(self.text_id, x_offset, y_offset)
|
||||||
|
|
Loading…
Add table
Reference in a new issue