Remove variable sharing hack from Position

Now, resolve it with constraints.
This commit is contained in:
Arjan Molenaar 2020-05-22 23:31:29 +02:00
parent 928e82397c
commit 422d561955
6 changed files with 18 additions and 51 deletions

View File

@ -16,9 +16,7 @@ def deprecated(message, since):
@functools.wraps(func)
def wrapper(*args, **kwargs):
warnings.warn(
f"{func.__name__}: {message}",
category=DeprecationWarning,
stacklevel=2,
f"{func.__name__}: {message}", category=DeprecationWarning, stacklevel=2
)
return func(*args, **kwargs)
@ -56,22 +54,6 @@ class Position:
pos = property(lambda s: (s.x, s.y), _set_pos)
def set_x(self, vx):
"""
Set the variable for x.
NOTE: This changes the variable object itself, not only the value!
"""
self._v_x = vx
def set_y(self, vy):
"""
Set the variable for y.
NOTE: This changes the variable object itself, not only the value!
"""
self._v_y = vy
def __str__(self):
return f"<{self.__class__.__name__} object on ({self.x}, {self.y})>"

View File

@ -319,12 +319,6 @@ class Element(Item):
h_sw = handles[SW]
h_se = handles[SE]
# Share variables
h_sw.pos.set_x(h_nw.pos.x)
h_se.pos.set_x(h_ne.pos.x)
h_ne.pos.set_y(h_nw.pos.y)
h_se.pos.set_y(h_sw.pos.y)
# edge of element define default element ports
self._ports = [
LinePort(h_nw.pos, h_ne.pos),
@ -336,6 +330,11 @@ class Element(Item):
# initialize min_x variables
self.min_width, self.min_height = 10, 10
self.constraint(horizontal=(h_nw.pos, h_ne.pos))
self.constraint(horizontal=(h_sw.pos, h_se.pos))
self.constraint(vertical=(h_nw.pos, h_sw.pos))
self.constraint(vertical=(h_ne.pos, h_se.pos))
# create minimal size constraints
self.constraint(left_of=(h_nw.pos, h_se.pos), delta=self._min_width)
self.constraint(above=(h_nw.pos, h_se.pos), delta=self._min_height)

View File

@ -94,13 +94,12 @@ def test_disconnect_item_with_constraint():
c.connect_item(line, line.handles()[0], b1, b1.ports()[0], constraint=cons)
assert count(c.get_connections(handle=line.handles()[0])) == 1
ncons = len(c.solver.constraints)
assert ncons == 5
assert len(c.solver.constraints) == 13
c.disconnect_item(line, line.handles()[0])
assert count(c.get_connections(handle=line.handles()[0])) == 0
assert len(c.solver.constraints) == 4
assert len(c.solver.constraints) == 12
def test_disconnect_item_by_deleting_element():
@ -141,13 +140,13 @@ def test_disconnect_item_with_constraint_by_deleting_element():
assert count(c.get_connections(handle=line.handles()[0])) == 1
ncons = len(c.solver.constraints)
assert ncons == 5
assert ncons == 13
c.remove(b1)
assert count(c.get_connections(handle=line.handles()[0])) == 0
assert 2 == len(c.solver.constraints)
assert 6 == len(c.solver.constraints)
def test_line_projection():

View File

@ -11,19 +11,6 @@ def test_position(position):
assert position[1] == pos.y
def test_set_xy():
pos = Position((1, 2))
x = Variable()
y = Variable()
assert x is not pos.x
assert y is not pos.y
pos.set_x(x)
pos.set_y(y)
assert x is pos.x
assert y is pos.y
def test_handle_x_y():
h = Handle()
assert 0.0 == h.pos.x

View File

@ -369,7 +369,7 @@ def test_orthogonal_line_merge(simple_canvas):
"""Test orthogonal line merging.
"""
assert 4 == len(simple_canvas.canvas.solver._constraints)
assert 12 == len(simple_canvas.canvas.solver._constraints)
simple_canvas.line.handles()[-1].pos = 100, 100
@ -379,14 +379,14 @@ def test_orthogonal_line_merge(simple_canvas):
segment.split_segment(0)
simple_canvas.line.orthogonal = True
assert 4 + 3 == len(simple_canvas.canvas.solver._constraints)
assert 6 + 6 + 3 == len(simple_canvas.canvas.solver._constraints)
assert 4 == len(simple_canvas.line.handles())
assert 3 == len(simple_canvas.line.ports())
# Test the merging
segment.merge_segment(0)
assert 4 + 2 == len(simple_canvas.canvas.solver._constraints)
assert 6 + 6 + 2 == len(simple_canvas.canvas.solver._constraints)
assert 3 == len(simple_canvas.line.handles())
assert 2 == len(simple_canvas.line.ports())

View File

@ -11,10 +11,10 @@ def test_undo_on_delete_element(revert_undo, undo_fixture):
canvas = Canvas()
canvas.add(b1)
assert 2 == len(canvas.solver.constraints)
assert 6 == len(canvas.solver.constraints)
canvas.add(b2)
assert 4 == len(canvas.solver.constraints)
assert 12 == len(canvas.solver.constraints)
canvas.add(line)
@ -26,7 +26,7 @@ def test_undo_on_delete_element(revert_undo, undo_fixture):
connector = Connector(line, line.handles()[-1])
connector.connect(sink)
assert 6 == len(canvas.solver.constraints)
assert 14 == len(canvas.solver.constraints)
assert 2 == len(list(canvas.get_connections(item=line)))
del undo_fixture[2][:] # Clear undo_list
@ -34,7 +34,7 @@ def test_undo_on_delete_element(revert_undo, undo_fixture):
# Here disconnect is not invoked!
canvas.remove(b2)
assert 3 == len(canvas.solver.constraints)
assert 7 == len(canvas.solver.constraints)
assert 1 == len(list(canvas.get_connections(item=line)))
cinfo = canvas.get_connection(line.handles()[0])
@ -48,7 +48,7 @@ def test_undo_on_delete_element(revert_undo, undo_fixture):
undo_fixture[0]() # Call undo
assert 6 == len(canvas.solver.constraints)
assert 14 == len(canvas.solver.constraints)
assert 2 == len(list(canvas.get_connections(item=line)))
cinfo = canvas.get_connection(line.handles()[0])