[Abstract] respect ref scale
This commit is contained in:
parent
548b51df47
commit
26cc0290b9
2 changed files with 25 additions and 0 deletions
|
|
@ -157,6 +157,8 @@ class Abstract(PortList, Mirrorable):
|
||||||
self.mirror()
|
self.mirror()
|
||||||
self.rotate_ports(ref.rotation)
|
self.rotate_ports(ref.rotation)
|
||||||
self.rotate_port_offsets(ref.rotation)
|
self.rotate_port_offsets(ref.rotation)
|
||||||
|
if ref.scale != 1:
|
||||||
|
self.scale_by(ref.scale)
|
||||||
self.translate_ports(ref.offset)
|
self.translate_ports(ref.offset)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
@ -174,6 +176,8 @@ class Abstract(PortList, Mirrorable):
|
||||||
# TODO test undo_ref_transform
|
# TODO test undo_ref_transform
|
||||||
"""
|
"""
|
||||||
self.translate_ports(-ref.offset)
|
self.translate_ports(-ref.offset)
|
||||||
|
if ref.scale != 1:
|
||||||
|
self.scale_by(1 / ref.scale)
|
||||||
self.rotate_port_offsets(-ref.rotation)
|
self.rotate_port_offsets(-ref.rotation)
|
||||||
self.rotate_ports(-ref.rotation)
|
self.rotate_ports(-ref.rotation)
|
||||||
if ref.mirrored:
|
if ref.mirrored:
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,17 @@ def test_abstract_ref_transform() -> None:
|
||||||
assert_allclose(abs_obj.ports["A"].rotation, pi / 2, atol=1e-10)
|
assert_allclose(abs_obj.ports["A"].rotation, pi / 2, atol=1e-10)
|
||||||
|
|
||||||
|
|
||||||
|
def test_abstract_ref_transform_scales_offsets() -> None:
|
||||||
|
abs_obj = Abstract("test", {"A": Port((10, 0), 0)})
|
||||||
|
ref = Ref(offset=(100, 100), rotation=pi / 2, mirrored=True, scale=2)
|
||||||
|
|
||||||
|
abs_obj.apply_ref_transform(ref)
|
||||||
|
|
||||||
|
assert_allclose(abs_obj.ports["A"].offset, [100, 120], atol=1e-10)
|
||||||
|
assert abs_obj.ports["A"].rotation is not None
|
||||||
|
assert_allclose(abs_obj.ports["A"].rotation, pi / 2, atol=1e-10)
|
||||||
|
|
||||||
|
|
||||||
def test_abstract_undo_transform() -> None:
|
def test_abstract_undo_transform() -> None:
|
||||||
abs_obj = Abstract("test", {"A": Port((100, 110), pi / 2)})
|
abs_obj = Abstract("test", {"A": Port((100, 110), pi / 2)})
|
||||||
ref = Ref(offset=(100, 100), rotation=pi / 2, mirrored=True)
|
ref = Ref(offset=(100, 100), rotation=pi / 2, mirrored=True)
|
||||||
|
|
@ -62,3 +73,13 @@ def test_abstract_undo_transform() -> None:
|
||||||
assert_allclose(abs_obj.ports["A"].offset, [10, 0], atol=1e-10)
|
assert_allclose(abs_obj.ports["A"].offset, [10, 0], atol=1e-10)
|
||||||
assert abs_obj.ports["A"].rotation is not None
|
assert abs_obj.ports["A"].rotation is not None
|
||||||
assert_allclose(abs_obj.ports["A"].rotation, 0, atol=1e-10)
|
assert_allclose(abs_obj.ports["A"].rotation, 0, atol=1e-10)
|
||||||
|
|
||||||
|
|
||||||
|
def test_abstract_undo_transform_scales_offsets() -> None:
|
||||||
|
abs_obj = Abstract("test", {"A": Port((100, 120), pi / 2)})
|
||||||
|
ref = Ref(offset=(100, 100), rotation=pi / 2, mirrored=True, scale=2)
|
||||||
|
|
||||||
|
abs_obj.undo_ref_transform(ref)
|
||||||
|
assert_allclose(abs_obj.ports["A"].offset, [10, 0], atol=1e-10)
|
||||||
|
assert abs_obj.ports["A"].rotation is not None
|
||||||
|
assert_allclose(abs_obj.ports["A"].rotation, 0, atol=1e-10)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue