Source code for gdsfactory.routing.route_bundle_all_angle
from __future__ import annotations
from kfactory.routing.aa.optical import OpticalAllAngleRoute, route_bundle
import gdsfactory as gf
from gdsfactory.typings import (
CellAllAngleSpec,
ComponentSpec,
Coordinates,
CrossSectionSpec,
Port,
)
from gdsfactory.utils import to_kdb_dpoints
[docs]
def route_bundle_all_angle(
component: ComponentSpec,
ports1: list[Port],
ports2: list[Port],
backbone: Coordinates | None = None,
separation: list[float] | float = 3.0,
straight: CellAllAngleSpec = "straight_all_angle",
bend: CellAllAngleSpec = "bend_euler_all_angle",
bend_ports: tuple[str, str] = ("o1", "o2"),
straight_ports: tuple[str, str] = ("o1", "o2"),
cross_section: CrossSectionSpec | None = None,
) -> list[OpticalAllAngleRoute]:
"""Route a bundle of ports to another bundle of ports with non manhattan ports.
Args:
component: to add the routing.
ports1: list of start ports to connect.
ports2: list of end ports to connect.
backbone: list of points to connect the ports.
separation: list of spacings.
straight: function to create straights.
bend: function to create bends.
bend_ports: tuple of ports to connect the bends.
straight_ports: tuple of ports to connect the straights.
cross_section: cross_section to use. Overrides the cross_section.
"""
if cross_section:
straight_func = gf.get_cell(straight, cross_section=cross_section)
bend_func = gf.get_cell(bend, cross_section=cross_section)
else:
straight_func = gf.get_cell(straight)
bend_func = gf.get_cell(bend)
backbone = backbone or []
c = gf.get_component(component)
return route_bundle(
c=c,
start_ports=ports1,
end_ports=ports2,
backbone=to_kdb_dpoints(backbone),
separation=separation,
straight_factory=straight_func,
bend_factory=bend_func,
bend_ports=bend_ports,
straight_ports=straight_ports,
)