Source code for gdsfactory.components.bend_circular

from __future__ import annotations

from functools import partial

import gdsfactory as gf
from gdsfactory.component import Component
from gdsfactory.path import arc
from gdsfactory.snap import snap_to_grid
from gdsfactory.typings import CrossSectionSpec


[docs] @gf.cell def bend_circular( radius: float | None = None, angle: float = 90.0, npoints: int | None = None, cross_section: CrossSectionSpec = "xs_sc", **kwargs, ) -> Component: """Returns a radial arc. Args: radius: in um. Defaults to cross_section_radius. angle: angle of arc (degrees). npoints: number of points. layer: layer to use. Defaults to cross_section.layer. width: width to use. Defaults to cross_section.width. cross_section: spec (CrossSection, string or dict). kwargs: additional cross_section arguments. .. code:: o2 | / / / o1_____/ """ x = gf.get_cross_section(cross_section, **kwargs) radius = radius or x.radius p = arc(radius=radius, angle=angle, npoints=npoints) c = Component() path = p.extrude(x) ref = c << path c.add_ports(ref.ports) c.absorb(ref) c.info["length"] = float(snap_to_grid(p.length())) c.info["dy"] = snap_to_grid(float(abs(p.points[0][0] - p.points[-1][0]))) c.info["radius"] = float(radius) x.validate_radius(radius) c.add_route_info( cross_section=x, length=c.info["length"], n_bend_90=abs(angle / 90.0) ) return c
bend_circular180 = partial(bend_circular, angle=180) if __name__ == "__main__": import gdsfactory as gf x1 = gf.cross_section.strip(width=1) x2 = gf.cross_section.strip(width=2) x = gf.cross_section.Transition(cross_section1=x1, cross_section2=x2) c = bend_circular(angle=180, cross_section=x, radius=10) c.show(show_ports=True)