Source code for gdsfactory.components.add_trenches
from __future__ import annotations
from functools import partial
from typing import Any
import gdsfactory as gf
from gdsfactory.components.bbox import bbox
from gdsfactory.components.bend_euler import bend_euler
from gdsfactory.components.coupler import coupler
from gdsfactory.typings import ComponentSpec, CrossSectionSpec, LayerSpec
[docs]
@gf.cell
def add_trenches(
component: ComponentSpec = coupler,
layer_component: LayerSpec = "WG",
layer_trench: LayerSpec = "DEEP_ETCH",
width_trench: float = 2.0,
cross_section: CrossSectionSpec = "rib_with_trenches",
top: float | None = None,
bot: float | None = None,
right: float | None = 0,
left: float | None = 0,
**kwargs: Any,
) -> gf.Component:
"""Return component with trenches.
Args:
component: component to add to the trenches.
layer_component: layer of the component.
layer_trench: layer of the trenches.
width_trench: width of the trenches.
cross_section: spec (CrossSection, string or dict).
top: width of the trench on the top. If None uses width_trench.
bot: width of the trench on the bottom. If None uses width_trench.
right: width of the trench on the right. If None uses width_trench.
left: width of the trench on the left. If None uses width_trench.
kwargs: component settings.
"""
component = gf.get_component(component, **kwargs)
xs = gf.get_cross_section(cross_section)
top = top if top is not None else width_trench
bot = bot if bot is not None else width_trench
right = right if right is not None else width_trench
left = left if left is not None else width_trench
core = component
clad = bbox(core, layer=layer_trench, top=top, bottom=bot, left=left, right=right)
c = gf.boolean(
clad,
core,
operation="not",
layer=layer_trench,
layer1=layer_trench,
layer2=layer_component,
)
c.add_ports(component.ports)
c.copy_child_info(component)
xs.add_bbox(c)
return c
add_trenches90 = partial(add_trenches, component=bend_euler, top=0, left=0, right=None)
if __name__ == "__main__":
c = add_trenches90()
c.show()