Skip to content

Commit

Permalink
fixing location of ports in references which have been rotated, when …
Browse files Browse the repository at this point in the history
…they have no orientation
  • Loading branch information
tvt173 committed Dec 2, 2022
1 parent 3ad6c48 commit dd48abb
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 9 deletions.
15 changes: 6 additions & 9 deletions gdsfactory/component_reference.py
Expand Up @@ -484,14 +484,7 @@ def _transform_port(
) -> Tuple[ndarray, float]:
"""Apply GDS-type transformation to a port (x_ref)."""
new_point = np.array(point)
new_orientation = orientation

if orientation is None:
if origin is not None:
new_point = new_point + np.array(origin)
if x_reflection:
new_point[1] = -new_point[1]
return new_point, new_orientation
new_orientation = orientation or 0

if x_reflection:
new_point[1] = -new_point[1]
Expand All @@ -501,7 +494,11 @@ def _transform_port(
new_orientation += rotation
if origin is not None:
new_point = new_point + np.array(origin)
new_orientation = mod(new_orientation, 360)

if orientation is None:
new_orientation = orientation
else:
new_orientation = mod(new_orientation, 360)

return new_point, new_orientation

Expand Down
28 changes: 28 additions & 0 deletions gdsfactory/tests/test_rotate.py
@@ -1,5 +1,7 @@
from __future__ import annotations

import numpy.testing as npt

import gdsfactory as gf


Expand All @@ -14,6 +16,32 @@ def test_rotate() -> None:
assert c1r.uid == c2r.uid


def test_rotate_port() -> None:
port_center_original = (10, 0)
port_center_expected = (0, 10)
rotation = 90
port_orientation_expected = rotation
c1 = gf.Component()
p1 = c1.add_port(
"o1", center=port_center_original, width=5, layer="WG", orientation=0
)
p2 = p1.copy()
p2.orientation = None
c1.add_port("e1", port=p2)
c = gf.Component()
c1_ref = c << c1
c1_ref.rotate(rotation)
port_center_actual = c1_ref["o1"].center
port_orientation_actual = c1_ref["o1"].orientation
npt.assert_almost_equal(port_center_actual, port_center_expected)
assert port_orientation_actual == port_orientation_expected

port_center_actual_no_orientation = c1_ref["e1"].center
port_orientation_actual_no_orientation = c1_ref["e1"].orientation
npt.assert_almost_equal(port_center_actual_no_orientation, port_center_expected)
assert port_orientation_actual_no_orientation is None


if __name__ == "__main__":
c1 = gf.components.straight()
c1r = c1.rotate()
Expand Down

0 comments on commit dd48abb

Please sign in to comment.