Source code for gdsfactory.geometry.fillet

from __future__ import annotations

import gdstk

from gdsfactory.typings import Component, ComponentReference


[docs] def fillet( operand: ComponentReference | Component | gdstk.Polygon | list[gdstk.Polygon], radius: float | list[float], tolerance: float = 0.01, ) -> list[gdstk.Polygon]: """Perform a fillet operation and return the list of resulting Polygons. Args: operand: polygon, list of Polygons, Component, or ComponentReference. radius: Fillet radius. You can also define a value for each vertex. tolerance: for calculating the polygonal approximation of the filleted corners. .. plot:: :include-source: import gdstk import gdsfactory as gf points = [(0, 0), (1.2, 0), (1.2, 0.3), (1, 0.3), (1.5, 1), (0, 1.5)] p0 = gdstk.Polygon(points, datatype=1) p1 = gdstk.Polygon(points, datatype=1) p1 = gf.geometry.fillet(p1, radius=1.0) c = gf.Component("demo") c.add_polygon(p0, layer=(1, 0)) c.add_polygon(p1, layer=(2, 0)) c.plot_matplotlib() c.show() """ if hasattr(operand, "get_polygons"): operand = operand.get_polygons(as_array=False) elif isinstance(operand, gdstk.Polygon): operand = [operand] return [polygon.fillet(radius=radius, tolerance=tolerance) for polygon in operand]
if __name__ == "__main__": import gdsfactory as gf points = [(0, 0), (1.2, 0), (1.2, 0.3), (1, 0.3), (1.5, 1), (0, 1.5)] o = gdstk.Polygon(points, datatype=1) o = gf.components.mzi() p = fillet(o, radius=0.3) c = gf.Component("demo") c.add_polygon(p) c.show(show_ports=True)