Source code for gdsfactory.components.cross

from __future__ import annotations

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


[docs] @gf.cell def cross( length: float = 10.0, width: float = 3.0, layer: LayerSpec = "WG", layers: LayerSpecs | None = None, 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. layers: Optional. List of layers for geometry. port_type: None, optical, electrical. """ c = gf.Component() layers = layers or [layer] for layer in layers: layer = gf.get_layer(layer) R = gf.components.rectangle(size=(width, length), layer=layer) r1 = c.add_ref(R).rotate(90) r2 = c.add_ref(R) r1.center = (0, 0) r2.center = (0, 0) if port_type: c.add_port( 1, width=width, layer=layer, orientation=0, center=(+length / 2, 0), port_type=port_type, ) c.add_port( 2, width=width, layer=layer, orientation=180, center=(-length / 2, 0), port_type=port_type, ) c.add_port( 3, width=width, layer=layer, orientation=90, center=(0, length / 2), port_type=port_type, ) c.add_port( 4, width=width, layer=layer, orientation=270, center=(0, -length / 2), port_type=port_type, ) c.auto_rename_ports() return c
if __name__ == "__main__": layers = {(1, 0), (2, 0)} c = cross(layers=layers) c.show(show_ports=True) # c.pprint_ports() # cc = gf.routing.add_fiber_array(component=c) # cc.show(show_ports=True)