Source code for gdsfactory.components.cross

from __future__ import annotations

import gdsfactory as gf
from gdsfactory.component import Component
from gdsfactory.typings import LayerSpec


[docs] @gf.cell def cross( length: float = 10.0, width: float = 3.0, layer: LayerSpec = "WG", port_type: str | None = None, ) -> Component: """Returns a cross from two rectangles of length and width. Args: length: float Length of the cross from one end to the other. width: float Width of the arms of the cross. layer: layer for geometry. port_type: None, optical, electrical. """ layer = gf.get_layer(layer) c = gf.Component() R = gf.components.rectangle(size=(width, length), layer=layer) r1 = c.add_ref(R).drotate(90) r2 = c.add_ref(R) r1.dcenter = (0, 0) r2.dcenter = (0, 0) c.flatten() if port_type: prefix = "o" if port_type == "optical" else "e" c.add_port( f"{prefix}1", width=width, layer=layer, orientation=0, center=(+length / 2, 0), port_type=port_type, ) c.add_port( f"{prefix}2", width=width, layer=layer, orientation=180, center=(-length / 2, 0), port_type=port_type, ) c.add_port( f"{prefix}3", width=width, layer=layer, orientation=90, center=(0, length / 2), port_type=port_type, ) c.add_port( f"{prefix}4", width=width, layer=layer, orientation=270, center=(0, -length / 2), port_type=port_type, ) c.auto_rename_ports() return c
if __name__ == "__main__": c = cross(port_type="optical") c.show() # c.pprint_ports() # cc = gf.routing.add_fiber_array(component=c) # cc.show( )