Source code for gdsfactory.components.cdsem_straight_density

"""CD SEM structures."""

from __future__ import annotations

from functools import partial

import gdsfactory as gf
from gdsfactory.cell import cell
from gdsfactory.component import Component
from gdsfactory.components.straight import straight
from gdsfactory.components.text_rectangular import text_rectangular
from gdsfactory.typings import (
    ComponentFactory,
    CrossSectionSpec,
    CrossSectionSpecs,
    Floats,
    Tuple,
)

text_rectangular_mini = partial(text_rectangular, size=1)

widths = 10 * (0.3,)
gaps = 10 * (0.3,)


[docs] @cell def cdsem_straight_density( widths: Floats = widths, gaps: Floats = gaps, length: float = 420.0, label: str = "", cross_section: CrossSectionSpec | CrossSectionSpecs = "xs_sc", text: ComponentFactory | None = text_rectangular_mini, ) -> Component: """Returns sweep of dense straight lines. Args: widths: list of widths. gaps: list of gaps. length: of the lines. label: defaults to widths[0] gaps[0]. cross_section: spec. Can be a list and then each line has a corresponding cross_section. text: optional function for text. """ c = Component() label = label or f"{int(widths[0]*1e3)} {int(gaps[0]*1e3)}" if isinstance(cross_section, Tuple): if len(cross_section) != len(widths): raise ValueError( "The number of specified cross sections does not correspond to the number of widths" ) else: cross_section = [cross_section] * len(widths) ymin = 0 for width, gap, xs in zip(widths, gaps, cross_section): tooth_ref = c << straight(length=length, cross_section=xs, width=width) tooth_ref.ymin = ymin ymin += width + gap if text: marker_label = c << gf.get_component(text, text=f"{label}") marker_label.xmin = tooth_ref.xmax + 5 return c
if __name__ == "__main__": c = cdsem_straight_density( widths=(0.2, 0.3), gaps=(0.1, 0.2), cross_section="xs_sc" ) c.show(show_ports=True)