Source code for gdsfactory.components.bbox

from __future__ import annotations

import gdsfactory as gf
from gdsfactory.typings import LayerSpec


def bbox_to_points(
    bbox: gf.kdb.DBox,
    top: float = 0,
    bottom: float = 0,
    left: float = 0,
    right: float = 0,
) -> list[tuple[float, float]]:
    """Returns bounding box rectangle with offsets.

    Args:
        bbox: DBbox.
        top: north offset.
        bottom: south offset.
        left: west offset.
        right: east offset.

    """
    xmin, ymin, xmax, ymax = bbox.left, bbox.bottom, bbox.right, bbox.top
    xmin = float(xmin)
    xmax = float(xmax)
    ymin = float(ymin)
    ymax = float(ymax)
    return [
        (xmin - left, ymin - bottom),
        (xmax + right, ymin - bottom),
        (xmax + right, ymax + top),
        (xmin - left, ymax + top),
    ]


[docs] @gf.cell def bbox( component: gf.Component | gf.Instance, layer: LayerSpec, top: float = 0, bottom: float = 0, left: float = 0, right: float = 0, ) -> gf.Component: """Returns bounding box rectangle from coordinates. Args: component: component or instance to get bbox from. layer: for bbox. top: north offset. bottom: south offset. left: west offset. right: east offset. """ c = gf.Component() bbox = component.dbbox() xmin, ymin, xmax, ymax = bbox.left, bbox.bottom, bbox.right, bbox.top points = [ [xmin - left, ymin - bottom], [xmax + right, ymin - bottom], [xmax + right, ymax + top], [xmin - left, ymax + top], ] c.add_polygon(points, layer=layer) return c
if __name__ == "__main__": # c = gf.Component() # l= gf.components.L() r = gf.c.text() b = bbox(r, layer=(2, 0)) c = gf.Component() c << r c << b c.show()